您的位置:首页 > 其它

J2EE--日志记录之log4j

2015-07-21 23:34 316 查看
公司的项目中有同事用到了log4j和slf4j,作为一名J2EE的小白,参考网上大神们的解释和度娘百科,做一点记录。本文先来记录log4j。

log4j是一个强大的日志记录开源包,可以单单改变配置文件,就能更改日志的内容和格式,而不需要改变一点代码,这对开发者来说是十分方便的。其实度娘百科已经是十分详细的了。

配置文件设置

第一步

新建一个文件,名为“log4j.properties”,这个文件作为log4j的配置文件,修改这个文件将能改变很多东西。

第二步

1)写入配置内容

log4j.rootCategory = INFO, stdout, file

log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %n%-d{yyyy-MM-dd HH:mm:ss}%n[%p]-[Thread: %t]-[%C.%M()]: %m%n

log4j.appender.file = org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File = ./demo_log4j.log
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = %n%-d{yyyy-MM-dd HH:mm:ss}%n[%p]-[Thread: %t]-[%C.%M()]: %m%n
log4j.appender.file.Threshold = INFO
log4j.appender.file.DatePattern = '.'yyyy-MM-dd


2)配置说明

第一行,log4j.rootCategory = INFO, stdout, file

形式为:log4j.rootCategory = [level], appenderName, appenderName, …

这一句是将等级为INFO的日志信息输出到stdout和file这个目的位置,stdout和file的定义在下面的代码中(分别为3~5行和7~10行),这两个名字可任意。等级可分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL。一般来说都只是使用四个级别(按优先级从高到低)分别是ERROR、WARN、INFO、DEBUG。设定一个级别,会把比它高的级别的日志信息也打印出来。

第三行,log4j.appender.stdout = org.apache.log4j.ConsoleAppender

这里设置目的位置appender,可选的值有:

1. org.apache.log4j.ConsoleAppender(控制台)

2. org.apache.log4j.FileAppender(文件)

3. org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)

4. org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),可通过log4j.appender.stdout.MaxFileSize=100KB设置大小,也可通过log4j.appender.stdout.MaxBackupIndex=1设置为保存一个备份文件。其中stdout为appender的名称。

5. org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

第四行,log4j.appender.stdout.layout = org.apache.log4j.PatternLayout

这里设置日志信息的格式(布局)Layout,可选的值有:

1. org.apache.log4j.HTMLLayout(以HTML表格形式布局)

2. org.apache.log4j.PatternLayout(可以灵活地指定布局模式)

3. org.apache.log4j.SimpleLayout(包含日志信息的级别和信息的字符串)

4. org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

第五行,log4j.appender.stdout.layout.ConversionPattern = %n%-d{yyyy-MM-dd HH:mm:ss}%n[%p]-[Thread: %t]-[%C.%M()]: %m%n

这里设置日志规则,参数解释如下:

1. %m:输出代码中指定的信息

2. %M:输出打印该条日志的方法名

3. %p:输出优先级,即DEBUG、INFO、WARN、ERROR、FATAL

4. %r:输出自应用启动到输出该条日志耗费的毫秒数

5. %c:输出所属的类目,通常就是所在类的全名

6. %t:输出产生该日志事件的线程名

7. %n:输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”

8. %d:输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss,SSS},输出类似:2015-07-21 23:06:34.325;

8. %l:输出日志事件的发生位置,

9. %L:在代码中的行数。

例子:%n[%d]-[%p]-[Thread:%t: %l]%n\u4FE1\u606F: %m%n,其中“\u4FE1\u606F”为“信息”,则输出为:

[2015-07-21 23:22:14,577]-[WARN]-[Thread:main: com.gaussli.Main.main(Main.java:15)]

信息: a,其中“a”为输出的自定义信息。

第十一行,log4j.appender.file.Threshold = INFO

这里设置只输出输出INFO级别以上的日志,则例子中DEBUG信息就不会写入文件了

第十二行,log4j.appender.file.DatePattern = ‘.’yyyy-MM-dd

这里设置每日日志生成后缀格式,方式有:

1. ‘.’ yyyy-MM:每月

2. ‘.’ yyyy-MM-dd:每日

3. ‘.’ yyyy-MM-dd-a:每日分两次(半日)

4. ‘.’ yyyy-MM-dd-HH:每小时

5. ‘.’ yyyy-MM-dd-HH-mm:每分钟

6. ‘.’ yyyy-ww:每周

Java代码调用

// 导入log4j必要的包
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class Main {
// 初始化日志对象,输入参数为当前类的类对象
final Logger log = Logger.getLogger(getClass());

public static void main(String[] args) {
// 指定log4j的配置文件
PropertyConfigurator.configure("src\\resources\\log4j.properties");

Main mainTest = new Main();
// 调用debug日志打印
mainTest.log.debug("a");
// 调用info日志打印
mainTest.log.info("a");
// 调用warn日志打印
mainTest.log.warn("a");
// 调用error日志打印
mainTest.log.error("a");
}
}


至此,运行应用,在控制台和本地的新增文件“demo_log4j.log”中就能看到日志信息了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: