log4j 几个技巧

1、想输出多个文件,不想所有的日志都输出在一个文件里。比如已有一个根logger,能记录所有的日志,但希望对某个类中(某部分或全部)的日志单独输出到一个文件中,怎么办?

解决办法:增加一个logger, 如希望一个叫Swift的类,里面有些日志希望单独输出,则可以增加一个logger记录器,名为SWIFT,日志输出级别为DEBUG。

log4j.logger.SWIFT=DEBUG,SWIFT log4j.appender.SWIFT=org.apache.log4j.DailyRollingFileAppender log4j.appender.SWIFT.File=C:/Logs/SWIFT.log log4j.appender.SWIFT.DatePattern='.'yyyy-MM-dd log4j.appender.SWIFT.layout=org.apache.log4j.PatternLayout log4j.appender.SWIFT.layout.ConversionPattern=[%d] %t %1p %18c{3}(%L):%m %n

 

与根logger的比较

log4j.rootLogger=DEBUG,D log4j.appender.D=org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File=C:/Logs/DEBUG.log log4j.appender.D.DatePattern='.'yyyy-MM-dd log4j.appender.D.ImmediateFlush=true log4j.appender.D.Threshold=DEBUG log4j.appender.D.layout=org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern=[%d] %1p %18c{3}(%L):%m %n

2、如果1中的日志输出太多,不想重复输出到DEBUG.log文件中怎么办?

解决:使用additivity属性,将其属性设置为false,则Swift类中的日志不会再输出到DEBUG.log文件中

log4j.logger.SWIFT=DEBUG,SWIFT log4j.appender.SWIFT=org.apache.log4j.DailyRollingFileAppender log4j.additivity.SWIFT=false log4j.appender.SWIFT.File=C:/Logs/SWIFT.log log4j.appender.SWIFT.DatePattern='.'yyyy-MM-dd log4j.appender.SWIFT.layout=org.apache.log4j.PatternLayout log4j.appender.SWIFT.layout.ConversionPattern=[%d] %t %1p %18c{3}(%L):%m %n

 

3、看日志的时候,若用ECLIPSE类的开发工具,则发现日志只能到日志文件中看,在开发环境中看不到

解决:只要设置日志输出到控制台即可

log4j.rootLogger=DEBUG,stdout log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=[%t] %-5p %-20c{2}(%L): - %m %n

4、一个类中,想要一些日志输出到总日志文件(如DEBUG.log)中,一些日志输出到另外的日志文件中,怎么办?

解决:log4j配置参考1的配置。类中设置两个或多个logger,想要输出到哪里就输出到哪里。

public class Swift extends HttpServlet { static Logger logger = Logger.getLogger(SwiftSys.class); static Logger log = Logger.getLogger("SWIFT"); public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { logger.debug("输出到总的DEBUG.log文件"); log.debug("开小灶,这个日志输出到SWIFT.log中"); }
5、如果想对日志分级怎么办,如错误日志输出到DEBUG.log文件中,错误日志输出到ERROR.log文件中

解决:使用Threshold属性,若输出到DEBUG.log文件中,则属性为DEBUG;若输出到ERROR.log文件中,则属性为ERROR。

下面的例子中logger D为输出DEBUG级别的日志,logger E为输出ERROR级别的日志。

log4j.rootLogger=DEBUG,D,E log4j.appender.D=org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File=C:/Logs/DEBUG.log log4j.appender.D.DatePattern='.'yyyy-MM-dd log4j.appender.D.ImmediateFlush=true log4j.appender.D.Threshold=DEBUG log4j.appender.D.layout=org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern=[%d] %1p %18c{3}(%L):%m %n log4j.appender.E=org.apache.log4j.DailyRollingFileAppender log4j.appender.E.File=C:/Logs/ERROR.log log4j.appender.E.DatePattern='.'yyyy-MM-dd log4j.appender.E.ImmediateFlush=true log4j.appender.E.Threshold=ERROR log4j.appender.E.layout=org.apache.log4j.PatternLayout log4j.appender.E.layout.ConversionPattern=[%d] %t %5p %18c{3}(%L):%m %n

总结:

一个完整的log4j的配置

log4j.rootLogger=DEBUG,D,E log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=[%t] %-5p %-20c{2}(%L): - %m %n log4j.appender.D=org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File=C:/Logs/DEBUG.log log4j.appender.D.DatePattern='.'yyyy-MM-dd log4j.appender.D.ImmediateFlush=true log4j.appender.D.Threshold=DEBUG log4j.appender.D.layout=org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern=[%d] %1p %18c{3}(%L):%m %n log4j.appender.E=org.apache.log4j.DailyRollingFileAppender log4j.appender.E.File=C:/Logs/ERROR.log log4j.appender.E.DatePattern='.'yyyy-MM-dd log4j.appender.E.ImmediateFlush=true log4j.appender.E.Threshold=ERROR log4j.appender.E.layout=org.apache.log4j.PatternLayout log4j.appender.E.layout.ConversionPattern=[%d] %t %5p %18c{3}(%L):%m %n log4j.appender.SWIFT=org.apache.log4j.DailyRollingFileAppender log4j.additivity.SWIFT=false log4j.appender.SWIFT.File=C:/Logs/SWIFT.log log4j.appender.SWIFT.DatePattern='.'yyyy-MM-dd log4j.appender.SWIFT.ImmediateFlush=true log4j.appender.SWIFT.Threshold=DEBUG log4j.appender.SWIFT.layout=org.apache.log4j.PatternLayout log4j.appender.SWIFT.layout.ConversionPattern=[%d] %t %1p %18c{3}(%L):%m %n

日志常用的两种的形式:

1、日期轮回,一天可以输出一个,一个小时输出一个,或一周输出一个等,具体的可以查阅相关资料,不再赘述。

DailyRollingFileAppender2、大小轮回,设置每个日志文件最大SIZE,总共多少个日志文件,若所有日志都写满,则最后的部分被挤出丢失。

RollingFileAppender

当然还有可以输出到文件,输出到数据表,或者输出到流等。

日志格式的几点说明:

%d 日期

%t 执行线程

%p 日志级别 如DEBUG, INFO, ERROR, FETAL

%c 所在类得包名,例: %18c{3} 18为固定宽度,不够留空,超过则按实际长度输出;3为包的层次,从当前类往上推

%L 日志输出代码所在行号

%m 日志内容

%n 换行符

高级的内容还有根据不同的用户标识来进行输出,每个用户都有对应的日志,因比较复杂,在此不作阐述。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值