1. log4j.properties路径
log4j:WARN No appenders could be found for logger (log4j.TestLog4j). log4j:WARN Please initialize the log4j system properly.
log4j.properties要放在哪以及怎样配置才能被解析呢?不同工程类型配置方式不同
普通java
方法1:把log4j.properties放在src目录(包的根目录)就行了
方法2:PropertyConfigurator.configure( "C:/Projects/log4j/log4j.properties" );
2. log4j.properties内容
我们要输出日志,首先得有日志对象(logger),那这些日志对象把日志输出到哪里呢,控制台还是文件,这就要设置输出位置(appender),输出的格式与内容又是什么样的呢,这就要设置输出样式(layout),这些设置完,log4j的配置也就完了
日志分为7个等级:ALL、DEBUG、INFO、WARN、ERROR、FATAL、OFF,从左到右等级由低到高,分等级是为了设置日志输出的门槛,只有等级等于或高于这个门槛的日志才有机会输出
- logger
日志实例,就是代码里实例化的Logger对象
1
log4j.rootLogger
=LEVEL,appender1,appender2,...
这是全局logger的配置,LEVEL用来设定日志等级,appenderName定义日志输出器,示例中的“console”就是一个日志输出器
下面给出一个更清晰的例子,配置“com.demo.test”包下所有类中实例化的Logger对象
1
2
log4j.logger.com.demo.test
=
DEBUG,test
log4j.additivity.com.demo.test
=
false
2、appender
日志输出器,指定logger的输出位置
1
log4j.appender.appenderName
=
className
appender有5种选择
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(将日志信息以流格式发送到任意指定的地方)
每种appender都有若干配置项,下面逐一介绍
ConsoleAppender(常用)
1
2
3
Threshold
=
WARN:指定日志信息的最低输出级别,默认DEBUG
ImmediateFlush
=
true:表示所有消息都会被立即输出,设为false则不输出,默认值是true
Target
=
System.err:默认值是System.out
FileAppender
1
2
3
4
Threshold
=
WARN:指定日志信息的最低输出级别,默认DEBUG
ImmediateFlush
=
true:表示所有消息都会被立即输出,设为false则不输出,默认true
Append
=
false:true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认true
File
=
D:
/
logs
/
logging.log4j:指定消息输出到logging.log4j文件
DailyRollingFileAppender(常用)
1
2
3
4
5
6
7
8
9
10
11
12
Threshold
=
WARN:指定日志信息的最低输出级别,默认DEBUG
ImmediateFlush
=
true:表示所有消息都会被立即输出,设为false则不输出,默认true
Append
=
false:true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认true
File
=
D:
/
logs
/
logging.log4j:指定当前消息输出到logging.log4j文件
DatePattern
=
'.'
yyyy
-
MM:每月滚动一次日志文件,即每月产生一个新的日志文件。当前月的日志文件名为logging.log4j,前一个月的日志文件名为logging.log4j.yyyy
-
MM
另外,也可以指定按周、天、时、分等来滚动日志文件,对应的格式如下:
1
)
'.'
yyyy
-
MM:每月
2
)
'.'
yyyy
-
ww:每周
3
)
'.'
yyyy
-
MM
-
dd:每天
4
)
'.'
yyyy
-
MM
-
dd
-
a:每天两次
5
)
'.'
yyyy
-
MM
-
dd
-
HH:每小时
6
)
'.'
yyyy
-
MM
-
dd
-
HH
-
mm:每分钟
RollingFileAppender
1
2
3
4
5
6
Threshold
=
WARN:指定日志信息的最低输出级别,默认DEBUG
ImmediateFlush
=
true:表示所有消息都会被立即输出,设为false则不输出,默认true
Append
=
false:true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认true
File
=
D:
/
logs
/
logging.log4j:指定消息输出到logging.log4j文件
MaxFileSize
=
100KB
:后缀可以是KB,MB或者GB。在日志文件到达该大小时,将会自动滚动,即将原来的内容移到logging.log4j.
1
文件
MaxBackupIndex
=
2
:指定可以产生的滚动文件的最大数,例如,设为
2
则可以产生logging.log4j.
1
,logging.log4j.
2
两个滚动文件和一个logging.log4j文件
3、layout
指定logger输出内容及格式
1
log4j.appender.appenderName.layout
=
className
layout有4种选择
1
2
3
4
org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息)
layout也有配置项,下面具体介绍
HTMLLayout
1
2
LocationInfo
=
true:输出java文件名称和行号,默认false
Title
=
My Logging: 默认值是Log4J Log Messages
PatternLayout(最常用的配置)
1
ConversionPattern
=
%
m
%
n:设定以怎样的格式显示消息
设置格式的参数说明如下
1
2
3
4
5
6
7
8
9
10
11
12
13
%
p:输出日志信息的优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%
d:输出日志时间点的日期或时间,默认格式为ISO8601,可以指定格式如:
%
d{yyyy
/
MM
/
dd HH:mm:ss,SSS}
%
r:输出自应用程序启动到输出该log信息耗费的毫秒数
%
t:输出产生该日志事件的线程名
%
l:输出日志事件的发生位置,相当于
%
c.
%
M(
%
F:
%
L)的组合,包括类全名、方法、文件名以及在代码中的行数
%
c:输出日志信息所属的类目,通常就是类全名
%
M:输出产生日志信息的方法名
%
F:输出日志消息产生时所在的文件名
%
L:输出代码中的行号
%
m:输出代码中指定的具体日志信息
%
n:输出一个回车换行符,Windows平台为
"rn"
,Unix平台为
"n"
%
x:输出和当前线程相关联的NDC(嵌套诊断环境)
%
%
:输出一个
"%"
字符