已经完结的工程中用到了log4j,抽时间写一篇日志记录下。java
//参考文章以下web
http://it.oyksoft.com/log4j/spring
1、log4j是什么?有什么用?sql
Log4j是一个日志记录工具,基于java语言的。咱们能够将日志信息输出到目的地(eg:控制台、某处文件夹等)。apache
2、log4j的日志等级tomcat
级别由低到高为 debug < info < warn < error < fatalapp
其详细对应的描述请参考百度百科。webapp
3、log4j配置方法工具
有三种方法来配置log4j:1>经过.properties文件(我作的项目都采用这种方式);2>经过xml文件;3>经过java代码。布局
不管采用上述哪一种方法,咱们均可以定义log4j的三个主要组件:logger、appender和layout。详细介绍三个组件:
1>Logger,它是记录器,负责记录处理日志的大部分操做。
配置语法为
log4j.rootLogger=[level],appenderName1,appenderName2,......
级别如上已经介绍,appenderName是指日志输出地名称,同时能够指定多个输出目的地。
2>Appender,它是日志文件输出地,它负责记录日志操做的输出。
配置语法为
log4j.appender.appenderName = xxxx
log4j.appender.appenderName.option1 = value1
......
log4j.appender.appenderName.optionN = valueN
注意:如上的appenderName为1>中定义的名称,能够任意起名称。
log4j提供的appender有以下几种:
org.apache.log4j.ConsoleAppender(输出到控制台)
org.apache.log4j.FileAppender(输出到文件)
org.apache.log4j.DailyRollingFileAppender(天天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
举个例子:log4j.appender.stdout = org.apache.log4j.ConsoleAppender
解释:定义一个名为stdout的输出目的地,输出到控制台。
3>Layout,它负责格式化Appender的输出
其语法为
log4j.appender.appenderName.layout = xxxx
log4j.appender.appenderName.layout.option1 = value1
......
log4j.appender.appenderName.layout.optionN = valueN
注意:log4j提供的layout有以下几种:
org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(灵活地指定布局模式)--这种用得最多
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
4、示例详解
以下是我配置的log4j.properties文件
#指定日志级别为DEBUG,所以级别高于debug的info < warn < error < fatal都会被输出来 #指定日志输出地名称:stdout、D和E log4j.rootLogger=DEBUG, stdout, D, E #以下设置个人工程中哪些可能会出现bug的地方 #zhiji.caren.mapper是我工程下的某个文件夹 log4j.logger.com.zhiji.caren.mapper=DEBUG #以下配置sql出现bug的地方 log4j.logger.java.sql.Connection = DEBUG log4j.logger.java.sql.Statement = DEBUG log4j.logger.java.sql.PreparedStatement = DEBUG log4j.logger.java.sql.ResultSet = DEBUG #以下是配置stdout输出地 #名为stdout的输出类型为控制台 log4j.appender.stdout = org.apache.log4j.ConsoleAppender #Target=System.out,输出到控制台 log4j.appender.stdout.Target = System.out #指定布局模式 log4j.appender.stdout.layout = org.apache.log4j.PatternLayout #指定输出打印信息的具体格式 log4j.appender.stdout.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n # 以下是配置D输出地 #指定输出地为文件 log4j.appender.D = org.apache.log4j.DailyRollingFileAppender #文件的路径为该项目根目录下的/WEB-INF/logs/debug.log #修改于2016/03/17。注意webapp.root要改成web.xml里面webAppRootKey的值 //log4j.appender.D.File = ${webapp.root}/WEB-INF/logs/debug.log log4j.appender.D.File = ${caren.root}/WEB-INF/logs/debug.log #DatePattern="."yyyy-MM意思:每个月滚动一第二天志文件,即每个月产生一个新的日志文件。 #当前月的日志文件名为debug.log4j,前一个月的日志文件名为debug.log4j.yyyy-MM。 log4j.appender.D.DatePattern = "."yyyy-MM #Append = true意思:将消息增长到指定文件中,false指将消息覆盖指定的文件内容。 log4j.appender.D.Append = true #Threshold=DEBUG:指定日志消息的输出最低层次。 log4j.appender.D.Threshold = DEBUG #指定布局模式 log4j.appender.D.layout = org.apache.log4j.PatternLayout #指定输出打印信息的具体格式 log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n # 以下是配置E输出地 --详细介绍参考D介绍 log4j.appender.E = org.apache.log4j.DailyRollingFileAppender log4j.appender.E.File = ${webapp.root}/WEB-INF/logs/error.log log4j.appender.E.Append = true log4j.appender.E.DatePattern = "."yyyy-MM log4j.appender.E.Threshold = ERROR log4j.appender.E.layout = org.apache.log4j.PatternLayout log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
备注:若是将多个工程都挂在一个tomcat下时,且这些工程都配了log4j时,这时会报错webAppRootkey的惟一性问题,所以,这里配置webapp.root时,最好是配成 本身的项目名称.root,这样,log4j文件就会产生在各自项目/WEB-INF/logs/xx.log下。
web.xml里面log4j的配置
<!-- Log4j 配置 --> <context-param> <param-name>webAppRootKey</param-name> <param-value>caren.root</param-value> </context-param> <context-param> <param-name>log4jRefreshInterval</param-name> <param-value>10000</param-value> </context-param> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener>
注意:webAppRootkey配置的时候,最好是配成 项目名称.root形式,而后对应的log4j.properties文件里面的webapp.root也应该修改为 项目名称.root。