3)配置日志信息的格式,语法如下所示:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.classlog4j.appender.appenderName.layout.option1 = value1
…
log4j.appender.appenderName.layout.option = valueN
Log4j 提供的格式有下面 4 种:
org.apache.log4j.HTMLLayout:HTML 表格
org.apache.log4j.PatternLayout:自定义
org.apache.log4j.SimpleLayout:包含日志信息的级别和信息字符串
org.apache.log4j.TTCCLayout:包含日志产生的时间、线程、类别等等信息
自定义格式的参数如下所示:
%m:输出代码中指定的消息
%p:输出优先级
%r:输出应用启动到输出该日志信息时花费的毫秒数
%c:输出所在类的全名
%t:输出该日志所在的线程名
%n:输出一个回车换行符
%d:输出日志的时间点
%l:输出日志的发生位置,包括类名、线程名、方法名、代码行数,比如:method:com.itwanger.Log4jDemo.main(Log4jDemo.java:14)
第三步,写个使用 Demo:
package com.itwanger;import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
/**
* @author 微信搜「沉默王二」,回复关键字 PDF
*/
public class Log4jDemo {
private static final Logger logger = LogManager.getLogger(Log4jDemo.class);
public static void main(String[] args) {
// 记录debug级别的信息
logger.debug("debug.");
// 记录info级别的信息
logger.info("info.");
// 记录error级别的信息
logger.error("error.");
}
}
1)获取 Logger 对象
要使用 Log4j 的话,需要先获取到 Logger 对象,它用来负责日志信息的打印。通常的格式如下所示:
private static final Logger logger = LogManager.getLogger(Log4jDemo.class);2)打印日志
有了 Logger 对象后,就可以按照不同的优先级打印日志了。常见的有以下 4 种:
Logger.debug() ;Logger.info() ;
Logger.warn() ;
Logger.error() ;
程序运行后会在 target 目录下生成两个文件,一个名叫 debug.log,内容如下所示:
2020-10-20 20:53:27 [ main:0 ] - [ DEBUG ] debug.2020-10-20 20:53:27 [ main:3 ] - [ INFO ] info.
2020-10-20 20:53:27 [ main:3 ] - [ ERROR ] error.
另外一个名叫 error.log,内容如下所示:
2020-10-20 20:53:27 [ main:3 ] - [ ERROR ] error.05、打印日志的 8 个小技巧
1)在打印 DEBUG 级别的日志时,切记要使用 isDebugEnabled()!那小伙伴们肯定非常好奇,为什么要这样做呢?
先来看一下 isDebugEnabled() 方法的源码:
publicboolean isDebugEnabled() {
if(repository.isDisabled( Level.DEBUG_INT))
return false;
return Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel());
}
内部使用了 isDisabled() 方法进行了日志级别的判断,如果 DEBUG 是禁用的话,就 return false 了。
再来看一下 debug() 方法的源码:
publicvoid debug(Object message) {
if(repository.isDisabled(Level.DEBUG_INT))
return;
if(Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel())) {
forcedLog(FQCN, Level.DEBUG, message, null);
}
}
咦,不是也用 isDisabled() 方法判断吗?难道使用 isDebugEnabled()不是画蛇添足吗?直接用 logger.debug() 不香吗?我来给小伙伴们解释下。
如果我们在打印日志信息的时候需要附带一个方法去获取参数值,就像下面这样:
logger.debug("用户名是:" + getName());