1. 基本使用方法
1. 配置根 Logger
语法:
1
| log4j.rootLogger = [level], [appenderName], [appenderName], …
|
其中 [level]
分为 OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL
或者自定义的级别。Log4j
建议只使用四个级别,优 先级从高到低分别是 ERROR、WARN、INFO、DEBUG
。
2. 配置日志信息输出目的地 Appender
appender 配置语法如下。appenderName 在 rootLogger 中配置
1 2 3 4
| log4j.appender.appenderName = fully.qualified.name.of.appender.class log4j.appender.appenderName.option1 = value1 … log4j.appender.appenderName.option = valueN
|
Log4j 提供的 appender 有以下几种:
1 2 3 4 5
| org.apache.log4j.ConsoleAppender(控制台) org.apache.log4j.FileAppender(文件) org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件) org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件) org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
|
3. 配置日志信息的格式(布局)
语法:
1 2 3 4
| log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class log4j.appender.appenderName.layout.option1 = value1 … log4j.appender.appenderName.layout.option = valueN
|
Log4j 提供的 layout 有以下几种:
1 2 3 4
| org.apache.log4j.HTMLLayout(以HTML表格形式布局) org.apache.log4j.PatternLayout(可以灵活地指定布局模式) org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串) org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
|
Log4j 提供的信息打印格式
- %c : 输出 logger 所属的类目,通常就是所在类的全名。如果加上{<层数>}表示列出从最内层算起的指定层数的名字空间。
1 2 3 4 5 6 7 8
| # 假设当前logger名字空间是"a.b.c": %c a.b.c %c{2} b.c %20c (若名字空间长度小于20,则左边用空格填充) %-20c (若名字空间长度小于20,则右边用空格填充) %.30c (若名字空间长度超过30,截去多余字符) %20.30c (若名字空间长度小于20,则左边用空格填充;若名字空间长度超过30,截去多余符) %-20.30c (若名字空间长度小于20,则右边用空格填充;若名字空间长度超过30,截去多字符)
|
- %C : 列出调用logger的类的全名(包含包路径)
- %d : 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
- %F : 显示调用logger的源文件名,如 %F,即 MyClass.java
- %l : 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。如 %l,即 Testlog4.main(TestLog4.java:10)
- %L : 显示调用logger的代码行
- %m : 显示输出消息
- %M : 显示调用logger的方法名
- %n : 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
- %p : 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
- %r : 输出自应用启动到输出该log信息耗费的毫秒数
- %t : 输出产生该日志事件的线程名
- %x : 按NDC(Nested Diagnostic Context,线程堆栈)顺序输出日志
- %X : 按MDC(Mapped Diagnostic Context,线程映射表)输出日志。通常用于多个客户端连接同一台服务器,方便服务器区分是那个客户端访问留下来的日志。
- %% : 显示一个百分号
3.添加依赖
1 2 3 4 5 6 7 8 9 10 11 12 13
| <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.5</version> </dependency>
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.5</version> </dependency>
|
最简单配置,打印到控制台
1 2 3 4 5 6 7
| log4j.rootLogger = debug,stdout
log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
|
4. 代码中配置
需要提前加载到 jvm 中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| public static void initLog() { FileInputStream fileInputStream = null; try { Properties properties = new Properties(); fileInputStream = new FileInputStream("src/main/resources/log4j.properties"); properties.load(fileInputStream); PropertyConfigurator.configure(properties); } catch (Exception e) { e.printStackTrace(); } finally { if (fileInputStream != null) { try { fileInputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } }
|
参考信息:最详细的Log4J使用教程