Java 第三方包-log4j

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
<!--for log : start -->
<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>
<!--for log : end -->

最简单配置,打印到控制台

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使用教程