Java利用Log4J输出日志文件

学习Java Log4J日志文件

Log4j是Apache开源的日志组件,可以通过maven进行jar包导入,也可以从官网上下最新的jar包。

log4j设置

在src统计目录创建并设置log4j.properties进行设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#设置日志输出等级为debug,低于debug就不会输出了
#设置日志输出到两个地方stdout,和R
log4j.rootLogger=debug, stdout, R

#输出信息到控制台stdout,并设置输出格式为PatternLayout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

#输出信息到第二个地方R,文件名为 project_root/example.log ,文件最大为100K,最多滚动5个文件
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log
log4j.appender.R.MaxFileSize=100KB
log4j.appender.R.MaxBackupIndex=5
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

log4j 输出格式

  • %c 输出日志信息所属的类的全名
  • %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd HH:mm:ss },输出类似:2002-10-18- 22:10:28
  • %f 输出日志信息所属的类的类名
  • %l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行
  • %m 输出代码中指定的信息,如log(message)中的message
  • %n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
  • %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推
  • %r 输出自应用启动到输出该日志信息所耗费的毫秒数
  • %t 输出产生该日志事件的线程名

上述%5p [%t] (%F:%L) - %m%n 为宽度为5的优先输出级 [线程名] (文件名:行号)- message信息 \r\n

log4j输出信息

使用log4j.xml格式进行配置

在src下配置log4j.xml文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration PUBLIC "-//log4j/log4j Configuration//EN" "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p %c.%M:%L - %m%n"/>
</layout>
</appender>

<!-- specify the logging level for loggers from other libraries -->
<logger name="com.opensymphony">
<level value="ERROR" />
</logger>

<logger name="org.apache">
<level value="ERROR" />
</logger>
<logger name="org.hibernate">
<level value="ERROR" />
</logger>

<!-- for all other loggers log only debug and above log messages -->
<root>
<priority value="ERROR"/>
<appender-ref ref="STDOUT" />
</root>

</log4j:configuration>

注意这个log4j.xml需要放在project根目录也就是和src文件夹同级,才能生效。不然会出现WARN警告。