关于LOG4J 按照级别输出日志,并按照级别输出到不同文件中的说法有很多, 网上贴的最多的log4j.properties的设置是这样的

  1. log4j.rootLogger=info,stdout,info,debug,error
  2. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  3. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  4. log4j.appender.stdout.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n
  5. log4j.logger.info=info
  6. log4j.appender.info=org.apache.log4j.DailyRollingFileAppender
  7. log4j.appender.info.layout=org.apache.log4j.PatternLayout
  8. log4j.appender.info.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n
  9. log4j.appender.info.datePattern='.'yyyy-MM-dd
  10. log4j.appender.info.Threshold = INFO
  11. log4j.appender.info.append=true
  12. log4j.appender.info.File=${webApp.root}/WEB-INF/logs/info.log
  13. log4j.logger.debug=debug
  14. log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender
  15. log4j.appender.debug.layout=org.apache.log4j.PatternLayout
  16. log4j.appender.debug.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n
  17. log4j.appender.debug.datePattern='.'yyyy-MM-dd
  18. log4j.appender.debug.Threshold = DEBUG
  19. log4j.appender.debug.append=true
  20. log4j.appender.debug.File=${webApp.root}/WEB-INF/logs/debug.log
  21. log4j.logger.error=error
  22. log4j.appender.error=org.apache.log4j.DailyRollingFileAppender
  23. log4j.appender.error.layout=org.apache.log4j.PatternLayout
  24. log4j.appender.error.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n
  25. log4j.appender.error.datePattern='.'yyyy-MM-dd
  26. log4j.appender.error.Threshold = ERROR
  27. log4j.appender.error.append=true
  28. log4j.appender.error.File=${webApp.root}/WEB-INF/logs/error.log

而实际上这部分代码解决不了按照LOG4J的级别文件进行文件输出。

配置中关键的配置说明是这一句:

  1. log4j.appender.debug.Threshold = INFO

而它的作用是输出INFO级别以上的内容到${webApp.root}/WEB-INF/logs/info.log中,所以info.log文件中包含了ERROR级别的文件。

正确的解法是:

定义自己的Appender类,继承DailyRollingFileAppender,改写针对Threshold 的设置说明。

源代码记载:

  1. public boolean isAsSevereAsThreshold(Priority priority)
  2. {
  3. return threshold == null || priority.isGreaterOrEqual(threshold);
  4. }

重写 isAsSevereAsThreshold(Priority priority)方法

  1. public class LogAppender extends DailyRollingFileAppender {
  2. @Override
  3. public boolean isAsSevereAsThreshold(Priority priority) {
  4. //只判断是否相等,而不判断优先级
  5. return this.getThreshold().equals(priority);
  6. }
  7. }

这样,进行唯一判断,只有当Threshold与priority一致时,才进行输出,就实现了真正Log4j按照级别输出日志文件。

在log4j.properties中,将配置文件作如下修改:

  1. log4j.logger.info=info
  2. <span style="BACKGROUND-COLOR: #33cc00">log4j.appender.info=com.company.LogAppender
  3. </span>log4j.appender.info.layout=org.apache.log4j.PatternLayout
  4. log4j.appender.info.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n
  5. log4j.appender.info.datePattern='.'yyyy-MM-dd
  6. log4j.appender.info.Threshold = INFO
  7. log4j.appender.info.append=true
  8. log4j.appender.info.File=${webApp.root}/WEB-INF/logs/info.log

到此,即完成了按照Log4j按照日志级别输出到不同文件中的功能。

Log4j按级别输出日志到不同文件配置分析 (转:projava)的更多相关文章

  1. Log4j按级别输出日志到不同文件配置分析

    关于LOG4J 按照级别输出日志,并按照级别输出到不同文件中的说法有很多, 网上贴的最多的log4j.properties的设置是这样的 log4j.rootLogger=info,stdout,in ...

  2. Log4j按级别输出日志到不同文件配置

    1.自定义LogFileAppender类,继承DailyRollingFileAppender,实现Log4j按级别输出日志到不同文件. package com.liying.mango.commo ...

  3. Log4j分级别保存日志到单个文件中,并记录IP和用户信息

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration S ...

  4. log4j按级别输出日志文件

    log4j.properties: BASE_DIR= /home/admin/preprocess-tmc-city/logs log4j.rootLogger=debug,stdout,debug ...

  5. Log4j按级别输出到不同文件

    log4j.properties 文件: log4j.logger.net.sf.hibernate.cache=debug log4j.rootLogger = error,portal_log,s ...

  6. log4j.xml配置,包含自定义log4j日志级别及输出日志到不同文件

      一.配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configura ...

  7. log4j配置文件及java调用 每个级别输出到不同的文件

    #配置根Logger log4j.rootLogger = DEBUG , RollingFile,CONSOLE #文件大小达到一定尺寸的时候创建一个新的文件 log4j.appender.Roll ...

  8. Log4j 配置某个类中某个方法的输出日志到指定文件

    我们在项目中使用log4j开发的时候,会遇到一些特殊的情况,比如:要输出某个类中某个方法的日志信息到文件中,方便以后查看 可以使用如下配置: log4j.rootLogger=info,stdout ...

  9. log4j 不同模块输出到不同的文件

    1.实现目标 不同业务的日志信息需要打印到不同的文件中,每天或者每个小时生成一个文件.如,注册的信息打印到register.log,每天凌晨生成一个register-年月日.log文件, 登录信息的日 ...

随机推荐

  1. REST:JAX-RS 与 Spring

    原文:https://developer.okta.com/blog/2017/08/09/jax-rs-vs-spring-rest-endpoints 作者:Brian Demers 译者:htt ...

  2. SUSE Linux Enterprise 11 离线安装 DLIB python机器学习模块

    python机器学习模块安装 环境:SUSE Linux Enterprise 11 sp4  离线安装 说明:在安装dlib时依赖的基础 环境较多,先升级gcc,以适应c++ 11的使用:需要用到c ...

  3. none,hidden和opacity="0"设置元素不可见的区别

    none,hidden和opacity="0"均可设置元素为不可见的状态.其中none属于display的属性值,hidden属于visibility的属性值.使用none时元素不 ...

  4. (1)ES6中let,const,对象冻结,跨模块常量,新增的全局对象介绍

    1.let声明变量,var声明变量,而const声明的常量 2.let与var的区别 let可以让变量长期驻扎在内存当作 let的作用域是分块[ {快1  {快2 }  }每个大括号表示一个独立的块 ...

  5. 转:【Java并发编程】之二:线程中断(含代码)

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17091267 使用interrupt()中断线程 当一个线程运行时,另一个线程可以调用对应 ...

  6. 结对作业--基于GUI的四则运算生成器

    组员:201421123015 陈麟凤 201421123019 张志杰 201421123020 黄海鸿 coding 地址 :https://coding.net/u/zhang1995/p/wo ...

  7. 团队作业10——项目复审与事后分析(Beta版本)

    油炸咸鱼24点APP 团队作业10--事后诸葛亮分析; 团队作业10--Beta阶段项目复审;

  8. 团队作业8——第二次项目冲刺(Beta阶段)Day7——5.26

    展开圆桌式会议: 会议内容:1.汇总BETA阶段的成果.2.针对BETA阶段的大家的获得的收获进行了讨论.3.对整个团队项目的过程进行了总结.每个人的工作分配: 队员 今日任务 贡献比 林燕 做最后测 ...

  9. Swing-JCheckBox用法-入门

    JCheckBox是Swing中的复选框.所谓复选框就是指,可以同时存在多个这样的控件,它们可以有多个处于被选中状态.对于每一个复选框而言,它只有选中和未选中两种状态. JCheckBox的常用方法如 ...

  10. for /r命令实现全盘搜索指定文件

    @echo off Rem :全盘搜索指定文件并输出到文本 set "fileName=Normal.dotm" set "outPutPath=C:\result.tx ...