java中日志打印

目录

  • 一、预先判断日志级别

  • 二、避免无效日志打印

  • 三、区别对待错误日志

  • 四、保证记录完整内容

打印日志,要注意下面4点。

一、预先判断日志级别

对DEBUG、INFO级别的日志,必须使用条件输出或者使用占位符的方式打印。该约定综合考虑了程序的运行效率和日志打印需求。

先来看一个反例:

log.debug("输入参数信息id=" + id + ",obj=" + obj);

如果在某个配置了打印级别为WARN的应用中,按照上面代码打印DEBUG级别的日志,那么该日志不会被打印,但是会执行字符串拼接操作;如果obj是一个对象,还会执行toString()方法,白白浪费系统资源。

代码正确示例如下:

//使用条件判断形式
if (log.isDebugEnabled()) {
    log.debug("输入参数信息id={}", id);
}
//使用占位符形式
log.debug("输入参数信息id={},obj={}", id, obj);

二、避免无效日志打印

生产环境禁止输出DEBUG日志且有选择的输出INFO日志。
使用INFO、WARN级别来记录业务日志行为信息时,一定要控制输出量,以免磁盘空间不足,同时要为日志文件设置合理的生命周期,及时清理过期的日志。

避免重复打印,务必在日志配置文件中设置additivity=false,示例如下:

<logger name="com.test" additivity="false">
    <level value="INFO" />
    <appender-ref ref="logfile" />
</logger>

additivity属性简介:

它是子Logger是否继承父Logger的输出源(appender)的标志位,默认情况下子Logger会继承父Logger的appender,也就是说子Logger会在父Logger的appender里输出。把additivity设为false,则子Logger只会在自己的appender里输出,而不会在父Logger的appender里输出。

三、区别对待错误日志

WARN、ERROR都是与错误有关的日志级别,但不要一发生错误就打印ERROR日志,比如一些业务异常是可以通过引导重试就能恢复的,例如用户输入参数错误,在这种情况下,记录日志是为了在用户咨询时可以还原现场如果输出为ERROR级别就表示一旦出现就需要人为介入,这显然不合理。所以,ERROR级别只记录系统逻辑错误、异常或者违反重要的业务规则,其他错误都可以归为WARN级别。

四、保证记录完整内容

日志记录的内容需要包括现场上下文信息和异常堆栈信息,所以打印时候需要注意下面两点:

1.记录异常时一定要输出异常堆栈,例如:

log.error("xxx" + e.getMessage(), e);

2.日志中如果输出对象实例,要确保实例类重写了toString方法,否则只会打印对象的hashCode值,没有实际意义。

转载:https://www.cnblogs.com/haha12/p/11834088.html

原文地址:https://www.cnblogs.com/lwcode6/p/11839620.html

时间: 2024-10-15 16:09:27

java中日志打印的相关文章

Java 中的打印流

概述 平时我们在控制台打印输出,是调用print方法和println方法完成的,这两个方法都来自于java.io.PrintStream类,该类能够方便地打印各种数据类型的值,是一种便捷的输岀方式. PrintStream类 PrintStream类,为其他输出流添加了功能,使他们能够方便的打印各种数据值表示格式. PrintStream类的特点: 只负责数据的输出,不负责数据的读取. 与其他输出流不同,PrintStream永远不会抛出IOException异常. 特有方法:print().p

Android 各层中日志打印功能的应用

1. HAL层 头文件:#include <utils/Log.h> 对应的级别 打印方法 VERBOSE LOGV()DEBUG LOGD()INFO LOGI()WARN LOGW()ERROR LOGE() 方法:LOGD("%d, %s", int, char* ) 2. JNI层 头文件:#include <utils/Log.h> 对应的级别 打印方法 VERBOSE LOGV()DEBUG LOGD()INFO LOGI()WARN LOGW()E

java中如何打印规定图案? 举例说明

9.4 print out the following pattern(打印图案). * *** ***** ******* ***** *** * 提示: 1)本题上面的图案和下面的图案是一样的.所以在打印上面图案的时候,把图案一行一行的都记录在数组b[i]当中.打印下面的图案时,直接就用上面那个数组反向 打印出来就可以了.马克-to-win 2)找一下规律,第一行左边有三个空格,中间有一个星号,右边有三个空格,第二行左边有两个空格,中间有三个星号,右边有两个空格.所以一行由三部分组成,左中右

java程序日志管理

初入软件开发这一行的人,可能对日志管理的概念并不是很明确,大概是由于经验所限,以至于根本还考虑不到这个问题. 而从某种意义上来说,日志管理实际上也不需要初入这一行的人来管,他们只需要负责实现自己的主要业务逻辑和功能就好了. 我当初刚入行的时候就有很长一段时间完全不用去关心日志,到后来偶尔涉及到的时候,也都是从其他地方采用cv大法直接搬用. 不过,随着工作时间的变化,随着手头上任务重要程度的变化,也随着接触到的项目数量的变化,让我越来越意识到日志的重要性,它在整个系统中发挥着至关重要的作用! 尤其

java中的日志打印

java中的日志打印: 日志工具类: 1 #获取日志 INFO:表示获取日志的等级 A1:表示日志存器,可以自定义名称 2 #===DEBUG INFO 3 log4j.rootLogger=DEBUG,A1,A2,A3 4 5 6 7 ########################控制台日志#################################### 8 9 #定义日志A1存放器 10 11 log4j.appender.A1=org.apache.log4j.ConsoleAp

Java项目中如何使用log4j和slf4j实现日志打印

什么是log4j? Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件,甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护进程等:我们也可以控制每一条日志的输出格式:通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程.最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码. 什么是slf4j? SLF4J,即简单日志门面(Simple Logging Facade fo

JAVA中的异常处理及日志(log4j为例)的使用

Java的异常 1.Java中所有异常和错误的基类:Throwable Throwable  error Exception (检查时异常)(运行时异常) RuntimeException2.Java中的异常分为运行时异常和检查时异常 运行时异常是表示RuntimeException以及所有子类,这些异常无需再程序中捕获,大多可以通过代码进行控制避免 检查时异常:除了RuntimeException以及其所有子类之外的所有异常,这些异常必须在程序中进行捕获处理. 异常的第一种处理机制--使用tr

Java中的日志——Java.util.logging、log4j、commons-logging

Java中给项目程序添加log主要有三种方式,一使用JDK中的java.util.logging包,一种是log4j,一种是commons-logging.其中log4j和commons-logging都是apache软件基金会的开源项目.这三种方式的区别如下: Java.util.logging,JDK标准库中的类,是JDK 1.4 版本之后添加的日志记录的功能包. log4j,最强大的记录日志的方式.可以通过配置 .properties 或是 .xml 的文件, 配置日志的目的地,格式等等.

JAVA中使用log4j及slf4j进行日志输出的方法

JAVA中输出日志比较常用的是log4j,这里讲下log4j的配置和使用方法,以及slf4j的使用. 一.下载log4j的架包,并导入项目中,如下: 二.创建log4j.properties配置文件 1.log4j配置文件的位置: (1)如果是java project项目,则在项目的根目录下创建log4j.properties而不是在src目录下. (2)如果是java web项目,则在src目录下创建log4j.properties配置文件,因为这个时候tomcat会去默认的加载这个配置文件,