关于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. 前端开发【第3篇:JavaScript序】

    JavaScript历史 聊聊JavaScript的诞生 JavaScirpt鼻祖:Bremdan Eich(布兰登·艾奇),JavaScript的诞生于浏览器的鼻祖网景公司(Netscape),发布 ...

  2. 删除git项目

    主页,点击右上头像-->your profile-->Popular repositories ,看到你要删除的项目,点击进去 --> 上面 选择settings-->到页面最 ...

  3. chrome开发工具指南(五)

    Main Menu Click More  to open the Main Menu. Settings To open Settings, do one of the following: Pre ...

  4. 基于大数据的电影网站项目开发之CentOS的安装(一)

    一.下载VMware并安装,至于安装教程从网上搜索进行参考 二.下载系统镜像文件,这里使用的是CentOS-6.5-x86_64-bin-DVD1.iso 三.安装镜像文件 运行VMware work ...

  5. Linq 实现sql中的not in和in条件查询

    T-SQL的IN: Select ProductID, ProductName, CategoryID From dbo.Products Where CategoryID in (1, 2) T-S ...

  6. 大数的减法函数--c语言

    代码展示:   http://paste.ubuntu.com/23693598/ #include<stdio.h> #include<stdlib.h> #include& ...

  7. 王者荣耀是怎样炼成的(一)《王者荣耀》用什么开发,游戏入门,unity3D介绍

    在国内,如果你没有听说过<王者荣耀>,那你一定是古董级的人物了. <王者荣耀>(以下简称“农药”),专注于移动端(Android.IOS)的MOBA游戏.笔者看到这么火爆,就萌 ...

  8. 自制STP配置实验

    本图使用Gns模拟器 实验需求: 1.要求利用vtp实现vlan同步设置 2.要求vtp server实现备份冗余 3.创建vlan 1~10要求MLSW1 是奇数vlan主根 MLSW2 是偶数vl ...

  9. Beta版本冲刺计划及安排(附七天冲刺的博客链接)

    Beta版本冲刺计划及安排(附七天冲刺的博客链接) 新增组员 本次换人加入我们团队的新成员是原"爸爸说的都队"的队长念其锋同学,经过我们小组严格的两轮面试,他从几个同样前来面试的同 ...

  10. 201521123031《java程序设计》第五周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 2. 书面作业 代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句 ...