首页 > 应用开发 > Java > Log4j 配置详解
【1】从零开始
a). 新建Java Project>>新建package>>新建java类;
b). import jar包(一个就够),这里我用的是log4j-1.2.14.jar,
c). 新建log4j.properties,置于project根目录下;
log4j.rootLogger=info, ServerDailyRollingFile, stdout
log4j.appender.ServerDailyRollingFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.ServerDailyRollingFile.DatePattern='.'yyyy-MM-dd
log4j.appender.ServerDailyRollingFile.File=C://logs/notify-subscription.log
log4j.appender.ServerDailyRollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.ServerDailyRollingFile.layout.ConversionPattern=%d - %m%n
log4j.appender.ServerDailyRollingFile.Append=truelog4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p [%c] %m%n
d). 在main()中,加载log4j:
PropertyConfigurator.configure("log4j.properties");
e). 写个小程序测试下,好了,我们看下效果:
【神马】找不到文件exception?
1). 用绝对路径,真心不推荐啊,太不优雅了;
2). 将log4j文件置于bin/目录下:
a). 代码中,PropertyConfigurator.configure("bin/log4j.properties");
b). 代码中,PropertyConfigurator.configure(ClassLoader.getSystemResource("log4j.properties"));
c). 注意,必须位于bin直接目录下,不可位于bin更深层的目录当中。可是这究竟是为神马捏?
可参考: http://blog.sina.com.cn/s/blog_3f4755c70100jco1.html
3) 必杀技:
private static void initLog4j() {
Properties prop = new Properties();
prop.setProperty("log4j.rootLogger", "DEBUG, CONSOLE");
prop.setProperty("log4j.appender.CONSOLE", "org.apache.log4j.ConsoleAppender");
prop.setProperty("log4j.appender.CONSOLE.layout", "org.apache.log4j.PatternLayout");
prop.setProperty("log4j.appender.CONSOLE.layout.ConversionPattern", "%d{HH:mm:ss,SSS} [%t] %-5p %C{1} : %m%n");
PropertyConfigurator.configure(prop);
}
【2】log4j 格式详解
log4j.rootLogger=日志级别,appender1, appender2, ….
log4j.appender.appender1=org.apache.log4j.日志输出到哪儿
log4j.appender.appender1.File=文件目录及文件
${user.home}/logs/...
log4j.appender.appender1.MaxFileSize=最大文件大小
log4j.appender.appender1.MaxBackupIndex=备份文件个数
log4j.appender.ServerDailyRollingFile.DatePattern=日志后缀格式
log4j.appender.appender1.layout=org.apache.log4j.日志布局格式
log4j.appender.appender1.layout.ConversionPattern=日志输出格式
log4j.appender.ServerDailyRollingFile.Append=true
总结一下:
| 参数 | 说明 | 例子 | |
|---|---|---|---|
| %c | 列出logger名字空间的全称,如果加上{<层数>}表示列出从最内层算起的指定层数的名字空间 | log4j配置文件参数举例 | 输出显示媒介 |
| 假设当前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的类的全名(包含包路径) | 假设当前类是"org.apache.xyz.SomeClass" | |
| %C | org.apache.xyz.SomeClass | ||
| %C{1} | SomeClass | ||
| %d | 显示日志记录时间,{<日期格式>}使用ISO8601定义的日期格式 | %d{yyyy/MM/dd HH:mm:ss,SSS} | 2005/10/12 22:23:30,117 |
| %d{ABSOLUTE} | 22:23:30,117 | ||
| %d{DATE} | 12 Oct 2005 22:23:30,117 | ||
| %d{ISO8601} | 2005-10-12 22:23:30,117 | ||
| %F | 显示调用logger的源文件名 | %F | MyClass.java |
| %l | 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数 | %l | MyClass.main(MyClass.java:129) |
| %L | 显示调用logger的代码行 | %L | 129 |
| %m | 显示输出消息 | %m | This is a message for debug. |
| %M | 显示调用logger的方法名 | %M | main |
| %n | 当前平台下的换行符 | %n |
Windows平台下表示rn UNIX平台下表示n |
| %p | 显示该条日志的优先级 | %p | INFO |
| %r | 显示从程序启动时到记录该条日志时已经经过的毫秒数 | %r | 1215 |
| %t | 输出产生该日志事件的线程名 | %t | MyClass |
| %x | 按NDC(Nested Diagnostic Context,线程堆栈)顺序输出日志 | 假设某程序调用顺序是MyApp调用com.foo.Bar | |
| %c %x - %m%n |
MyApp - Call com.foo.Bar. com.foo.Bar - Log in Bar MyApp - Return to MyApp. |
||
| %X | 按MDC(Mapped Diagnostic Context,线程映射表)输出日志。通常用于多个客户端连接同一台服务器,方便服务器区分是那个客户端访问留下来的日志。 | %X{5} | (记录代号为5的客户端的日志) |
| %% | 显示一个百分号 | %% | % |
举个实际的例子,比如log4j.properties的内容为:
|
#log4j config log4j.rootLogger=DEBUG,OUTPUT log4j.appender.OUTPUT.layout=org.apache.log4j.PatternLayout log4j.appender.OUTPUT.layout.ConversionPattern=%d{DATE} %-4r [%t] %-5p %c %x - %m%n …… |
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9399028/viewspace-2057741/ ,如需转载,请注明出处,否则将追究法律责任。