热门系列:
-
【Java编程系列】WebService的使用
-
【Java编程系列】在Spring MVC中使用工具类调用Service层时,Service类为null如何解决
-
【Java编程系列】Spring中使用代码实现动态切换主从库(多数据源)
-
【Java编程系列】log4j配置日志按级别分别生成日志文件
-
【Java编程系列】使用Java进行串口SerialPort通讯
-
【Java编程系列】comet4j服务器推送实现
-
【Java编程系列】使用JavaMail通过SMTP协议发送局域网(内网)邮件
-
【Java编程系列】解决Java获取前端URL中加号(+)被转换成空格的问题
-
【Java编程系列】使用List集合对百万数据量高效快速过滤去重筛选
-
【Java编程系列】Java自定义标签-Tag
-
【Java编程系列】二进制如何表示小数?0.3+0.6为什么不等于0.9?纳尼!!!
-
程序人生,精彩抢先看
Log4j配置及说明
1.配置内容模板
说明:内容本人亲测使用并编辑分享。
#定义LOG输出级别
log4j.rootLogger=DEBUG,Console,D,I,E
#定义日志输出目的地为控制台
log4j.appender.Console.Threshold=DEBUG
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
#可以灵活地指定日志输出格式,下面一行是指定具体的格式
log4j.appender.Console.layout = org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
### 输出到日志文件(DEBUG级别) ###
log4j.appender.D = com.cams.util.Log4jAppender
###设置DatePattern,当天日志保存到log.log文件,前一天的日志文件名将被修改为
#debug.log + _yyyy-MM-dd.log
log4j.appender.D.File =logs/cams/debug.log
log4j.appender.D.DatePattern = '_'yyyy-MM-dd'.log'
log4j.appender.D.Append = true
## 输出DEBUG级别以上的日志
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
### 输出到日志文件(INFO级别) ###
log4j.appender.I = com.cams.util.Log4jAppender
###设置DatePattern,当天日志保存到log.log文件,前一天的日志文件名将被修改为
#info.log + _yyyy-MM-dd.log
log4j.appender.I.File =logs/cams/info.log
log4j.appender.I.DatePattern = '_'yyyy-MM-dd'.log'
log4j.appender.I.Append = true
## 输出DEBUG级别以上的日志
log4j.appender.I.Threshold = INFO
log4j.appender.I.layout = org.apache.log4j.PatternLayout
log4j.appender.I.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
### 保存异常信息到单独文件(ERROR级别) ###
log4j.appender.E = com.cams.util.Log4jAppender
###设置DatePattern,当天日志保存到error.log文件,前一天的日志文件名将被修改为
#error.log + _yyyy-MM-dd.log
log4j.appender.E.File =logs/cams/error.log
log4j.appender.E.DatePattern = '_'yyyy-MM-dd'.log'
log4j.appender.E.Append = true
## 只输出ERROR级别以上的日志!!!
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = [%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
log4j.logger.org.springframework.jdbc=DEBUG
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
##log4j.logger.com.cams.dao=debug,A1
###显示mybatis的SQL语句部分,类似于hibernate在控制台打印sql语句那部分
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
注意点:当我们需要将日志按Error,Warn,Info,Debug等级别来单独生成日志文件时,仅配置log4j.propertites还不行。必须重写DailyRollingFileAppender类的isAsSevereAsThreshold方法。此方法中源代码是返回当前级别及以上。所以此处重写应范围与相应级别匹配;即如下:
package com.cams.util;
import org.apache.log4j.DailyRollingFileAppender;
import org.apache.log4j.Priority;
public class Log4jAppender extends DailyRollingFileAppender{
@Override
public boolean isAsSevereAsThreshold(Priority priority) {
// TODO Auto-generated method stub
//只判断是否相等,而不判断优先级
return this.getThreshold().equals(priority);
}
}
2.具体配置项说明:
1.输出级别的种类
- ERROR、WARN、INFO、DEBUG
- ERROR 为严重错误 主要是程序的错误
- WARN 为一般警告,比如session丢失
- INFO 为一般要显示的信息,比如登录登出
- DEBUG 为程序的调试信息
2.配置日志信息输出目的地
- log4j.appender.appenderName = fully.qualified.name.of.appender.class
- 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(将日志信息以流格式发送到任意指定的地方)
3.配置日志信息的格式
- log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
- 1.org.apache.log4j.HTMLLayout(以HTML表格形式布局),
- 2.org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
- 3.org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
- 4.org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
4.控制台选项
- Threshold=DEBUG:指定日志消息的输出最低层次。
- ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
- Target=System.err:默认情况下是:System.out,指定输出控制台
FileAppender 选项
- Threshold=DEBUF:指定日志消息的输出最低层次。
- ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
- File=mylog.txt:指定消息输出到mylog.txt文件。
- Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
RollingFileAppender 选项
- Threshold=DEBUG:指定日志消息的输出最低层次。
- ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
- File=mylog.txt:指定消息输出到mylog.txt文件。
- Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
- MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。
- MaxBackupIndex=2:指定可以产生的滚动文件的最大数。
例:log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
5.日志信息格式中几个符号所代表的含义:
- -X号: X信息输出时左对齐;
- %p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,
- %d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
- %r: 输出自应用启动到输出该log信息耗费的毫秒数
- %c: 输出日志信息所属的类目,通常就是所在类的全名
- %t: 输出产生该日志事件的线程名
- %l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main (TestLog4.java:10)
- %x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
- %%: 输出一个"%"字符
- %F: 输出日志消息产生时所在的文件名称
- %L: 输出代码中的行号
- %m: 输出代码中指定的消息,产生的日志具体信息
- %n: 输出一个回车换行符,Windows平台为"/r/n",Unix平台为"/n"输出日志信息换行
可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:1) %20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。2) %-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。3) %.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。4) %20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边较远输出的字符截掉。
本博客皆为学习、分享、探讨为本,欢迎各位朋友评论、点赞、收藏、关注,一起加油!