J2EE--日志记录之log4j
2015-07-21 23:34
316 查看
公司的项目中有同事用到了log4j和slf4j,作为一名J2EE的小白,参考网上大神们的解释和度娘百科,做一点记录。本文先来记录log4j。
log4j是一个强大的日志记录开源包,可以单单改变配置文件,就能更改日志的内容和格式,而不需要改变一点代码,这对开发者来说是十分方便的。其实度娘百科已经是十分详细的了。
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:每周
至此,运行应用,在控制台和本地的新增文件“demo_log4j.log”中就能看到日志信息了。
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”中就能看到日志信息了。
相关文章推荐
- 【安卓基础三】adb命令
- Mycat(4):消息表mysql数据库分表实践
- Matrix Admin 后台模板笔记
- 变量及函数的生存期、作用范围、链接属性
- java基础语法--02
- POJ 2479 Maximum sum & POJ 2573 Max Sequence (DP,最大连续子串和)
- 设计模式_适配器模式
- c++ vector
- Java谣言终结者之Arraylist和Linkedlist到底谁快
- ibatis+springmvc的dao实现+配置文件
- ZOJ 1048 Financial Management
- Hdu 2072 单词数【字符串】
- UITabBar自定义方式三(中间有按钮)
- Android之——拦截短信
- 线程之从线程返回信息
- 理解 Python 中的 *args 和 **kwargs
- 游程编码
- eclipse打包问题:Export aborted because fatal lint errors we
- Neither GenericXmlContextLoader nor AnnotationConfigContextLoader was able to detect defaults
- JAVA基础之多线程