个人随笔
目录
当前位置: 首页 Java log4j日志详解
log4j日志详解
2019-11-19 23:09:40

log4j这个开源的组件用于日志输出非常方便,下面我们来测试使用下。

一、环境准备

新建一个maven项目,添加如下依赖

  1. <dependency>
  2. <groupId>log4j</groupId>
  3. <artifactId>log4j</artifactId>
  4. <version>1.2.17</version>
  5. </dependency>

项目结构如下图

二、log4j.properties配置文件

  1. # priority :debug<info<warn<error
  2. #第一位为日志输出级别 后面的跟下面每种日志输出方案相对应
  3. log4j.rootLogger=debug,stdout,info,debug,warn,error
  4. #console
  5. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  6. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  7. log4j.appender.stdout.layout.ConversionPattern= [%d{yyyy-MM-dd HH:mm:ss a}]:%p %l%m%n
  8. #info log
  9. log4j.logger.info=info
  10. log4j.appender.info=org.apache.log4j.DailyRollingFileAppender
  11. log4j.appender.info.File=logs/info.log
  12. log4j.appender.info.Append=true
  13. log4j.appender.info.Threshold=INFO
  14. log4j.appender.info.layout=org.apache.log4j.PatternLayout
  15. log4j.appender.info.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n
  16. #debug log
  17. log4j.logger.debug=debug
  18. log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender
  19. log4j.appender.debug.File=logs/debug.log
  20. log4j.appender.debug.Append=true
  21. log4j.appender.debug.Threshold=DEBUG
  22. log4j.appender.debug.layout=org.apache.log4j.PatternLayout
  23. log4j.appender.debug.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n
  24. #warn log
  25. log4j.logger.warn=warn
  26. log4j.appender.warn=org.apache.log4j.DailyRollingFileAppender
  27. log4j.appender.warn.File=logs/warn.log
  28. log4j.appender.warn.Append=true
  29. log4j.appender.warn.Threshold=WARN
  30. log4j.appender.warn.layout=org.apache.log4j.PatternLayout
  31. log4j.appender.warn.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n
  32. #error
  33. log4j.logger.error=error
  34. log4j.appender.error = org.apache.log4j.DailyRollingFileAppender
  35. log4j.appender.error.File = logs/error.log
  36. log4j.appender.error.Append = true
  37. log4j.appender.error.Threshold = ERROR
  38. log4j.appender.error.layout = org.apache.log4j.PatternLayout
  39. log4j.appender.error.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n

上面日志输出级别为debug,那么将会输出debug、info、warn、error的日志,如果配置的是error,就只会输出error的日志。

三、Log4jTest

  1. package com.suibibk;
  2. import org.apache.log4j.Logger;
  3. public class Log4jTest {
  4. private static Logger log = Logger.getLogger("Log4jTest");
  5. public static void main(String[] args) {
  6. log.debug("这个是debug日志");
  7. log.info("这个是info日志");
  8. log.warn("这个是警告日志");
  9. log.error("这个是错误日志");
  10. }
  11. }

四、测试

运行案例,因为我们的日志都配置输出在logs目录下,打开logs目录可以看到日下是个文件:

打开info.log会看到如下内容

  1. 2019-11-19 09:06:28 上午 [Thread: main][ Class:Log4jTest >> Method: com.suibibk.Log4jTest.main(Log4jTest.java:9) ]
  2. INFO:这个是info日志
  3. 2019-11-19 09:06:28 上午 [Thread: main][ Class:Log4jTest >> Method: com.suibibk.Log4jTest.main(Log4jTest.java:10) ]
  4. WARN:这个是警告日志
  5. 2019-11-19 09:06:28 上午 [Thread: main][ Class:Log4jTest >> Method: com.suibibk.Log4jTest.main(Log4jTest.java:11) ]
  6. ERROR:这个是错误日志

打开error.log会看到如下内容

  1. 2019-11-19 09:06:28 上午 [Thread: main][ Class:Log4jTest >> Method: com.suibibk.Log4jTest.main(Log4jTest.java:11) ]
  2. ERROR:这个是错误日志

五、配置文件解析

1.配置根Logger,其语法为:
  1. log4j.rootLogger = [ level ] , appenderName, appenderName,

其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优 先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定 义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。 appenderName就是指B日志信息输出到哪个地方。您可以同时指定多个输出目的地。

这里配置的为:

  1. log4j.rootLogger=debug,stdout,info,debug,warn,error

表明日志级别level对应的是debug(大小写都可以),然后appenderName有五个地方,对应下面的五个配置,分别是控制台,info日志,debug日志,warn日志和错误日志的输出地方,当然这里不一定叫做info,可以取任何名字,只要跟下面对应就可以了。

2、配置日志信息输出目的地Appender,其语法为:
  1. log4j.appender.appenderName = fully.qualified.name.of.appender.class
  2. log4j.appender.appenderName.option1 = value1
  3. log4j.appender.appenderName.option = valueN

其中,Log4j提供的appender有以下几种:

  1. org.apache.log4j.ConsoleAppender(控制台),
  2. org.apache.log4j.FileAppender(文件),
  3. org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
  4. org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
  5. org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

比如我上面配置的stdout和info的appender

  1. #console
  2. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  3. ...
  4. #info log
  5. log4j.logger.info=info
  6. log4j.appender.info=org.apache.log4j.DailyRollingFileAppender
  7. ...
3、配置日志信息的格式(布局),其语法为:
  1. log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
  2. log4j.appender.appenderName.layout.option1 = value1
  3. log4j.appender.appenderName.layout.option = valueN

其中,Log4j提供的layout有以e几种:

  1. org.apache.log4j.HTMLLayout(以HTML表格形式布局),
  2. org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
  3. org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
  4. org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

我这里采用的是PatternLayout

  1. log4j.appender.info.layout=org.apache.log4j.PatternLayout
  2. log4j.appender.info.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n

Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下: %m 输出代码中指定的消息

  1. %p 输出优先级,即DEBUGINFOWARNERRORFATAL
  2. %r 输出自应用启动到输出该log信息耗费的毫秒数
  3. %c 输出所属的类目,通常就是所在类的全名
  4. %t 输出产生该日志事件的线程名
  5. %n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n
  6. %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:20021018 221028921
  7. %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)
4、配置输出日志文件
  1. log4j.appender.info.File=logs/info.log

这个是我上面info日志的文件位置,在logs下面的info.log文件


结束!

 374

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2