【转】Log4j按级别输出日志到不同文件配置分析

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

log4j.rootLogger=info,stdout,info,debug,error
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n

log4j.logger.info=info
log4j.appender.info=org.apache.log4j.DailyRollingFileAppender
log4j.appender.info.layout=org.apache.log4j.PatternLayout
log4j.appender.info.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n
log4j.appender.info.datePattern=‘.‘yyyy-MM-dd
log4j.appender.info.Threshold = INFO
log4j.appender.info.append=true
log4j.appender.info.File=${webApp.root}/WEB-INF/logs/info.log

log4j.logger.debug=debug
log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender
log4j.appender.debug.layout=org.apache.log4j.PatternLayout
log4j.appender.debug.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n
log4j.appender.debug.datePattern=‘.‘yyyy-MM-dd
log4j.appender.debug.Threshold = DEBUG
log4j.appender.debug.append=true
log4j.appender.debug.File=${webApp.root}/WEB-INF/logs/debug.log

log4j.logger.error=error
log4j.appender.error=org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.layout=org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n
log4j.appender.error.datePattern=‘.‘yyyy-MM-dd
log4j.appender.error.Threshold = ERROR
log4j.appender.error.append=true
log4j.appender.error.File=${webApp.root}/WEB-INF/logs/error.log 

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

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

log4j.appender.debug.Threshold = INFO

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

正确的解法是:

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

源代码记载:

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

重写 isAsSevereAsThreshold(Priority priority)方法

public class LogAppender extends DailyRollingFileAppender {

 @Override
 public boolean isAsSevereAsThreshold(Priority priority) {
  //只判断是否相等,而不判断优先级
  return this.getThreshold().equals(priority);
 }
}

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

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

log4j.logger.info=info
log4j.appender.info=com.company.LogAppender
log4j.appender.info.layout=org.apache.log4j.PatternLayout
log4j.appender.info.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n
log4j.appender.info.datePattern=‘.‘yyyy-MM-dd
log4j.appender.info.Threshold = INFO
log4j.appender.info.append=true
log4j.appender.info.File=${webApp.root}/WEB-INF/logs/info.log

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

本文转自此作者地址:http://blog.csdn.net/projava/article/details/7344839

时间: 2024-12-10 18:04:43

【转】Log4j按级别输出日志到不同文件配置分析的相关文章

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

1.自定义LogFileAppender类,继承DailyRollingFileAppender,实现Log4j按级别输出日志到不同文件. package com.liying.mango.common.interceptor; import org.apache.log4j.DailyRollingFileAppender; import org.apache.log4j.Priority; public class LogFileAppender extends DailyRollingFi

Log4j按级别输出日志到不同的文件

log4j.rootLogger=info,stdout,info,debug,error log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n log4j.logg

Log4j按级别输出到不同文件

log4j.properties 文件: log4j.logger.net.sf.hibernate.cache=debug log4j.rootLogger = error,portal_log,shop_log log4j.appender.ROLLING_FILE=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.ROLLING_FILE.File=/logs/PT.loglog4j.appender.ROLLING_FILE.

Log4J日志配置详解和自定义log4j日志级别及输出日志到不同文件实现方法

Log4J日志配置详解 一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders(输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使用这三个组件可以轻松地记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置. 1.Loggers Loggers组件在此系统中被分为五个级别:DEBUG.INFO.WARN.ERROR和FATAL.这五个级别是有顺序的,DEBUG < INFO < WARN <

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

1.实现目标 不同业务的日志信息需要打印到不同的文件中,每天或者每个小时生成一个文件.如,注册的信息打印到register.log,每天凌晨生成一个register-年月日.log文件, 登录信息的日志打印到一个login.log文件中,login-年月日.log. 2.maven配置 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.or

log4j教程 11、日志记录到文件

要写日志信息到一个文件中,必须使用org.apache.log4j.FileAppender.有以下FileAppender的配置参数: FileAppender配置: 属性 描述 immediateFlush 标志的默认设置为true,这意味着输出流的文件被刷新,在每个追加操作 encoding 它可以使用任何字符编码.默认情况下是特定于平台的编码方案 threshold 这个 appender 阈值级别 Filename 日志文件的名称 fileAppend 默认设置为true,这意味着记录

使用System.out.printf()输出日志重定向到文件后显示混乱问题

写了一个小工具,使用System.out.printf()输出日志,以方便使用者查看,在终端显示没有问题,但重定向到文件就有问题了,会出现一些很奇怪的乱序现象. 上网查询资料,判断应该是跟重定向和Linux缓冲区有关,标准输出为行缓冲,文件为全缓冲,可以使用 stdbuf -oL [command] 来实现重定义缓冲区类型,于是将原先的启动脚本中的 nohup java ... & 改为 nohup stdbuf -oL ... & , 这样改完后用vim命令查看文件内容是正常的,但使用t

MySQL慢查询日志相关的文件配置和使用。

MySQL慢查询日志提供了超过指定时间阈值的查询信息,为性能优化提供了主要的参考依据,是一个非常实用的功能,MySQL慢查询日志的开启和配置非常简单,可以指定记录的文件(或者表),超过的时间阈值等就可以记录到慢sql了,实话讲,相比较sqlserver的trace或者扩展事件(虽然此二者的作用并非仅仅如此),MySQL的配置总是给人一种非常清爽的感觉. 1,慢查询日志的打开 正常情况下,只需要在配置文件中增加slow_query_log = 1配置,即打开慢查询日志,未指定slow_query_

java传统web项目添加maven管理jar包,log4j无法正常输出日志

背景 笔者最近在给公司一个老的web项目改造升级,项目使用springmvc+mybatis,由于项目比较久远,没有使用maven管理jar版本,有可能是当时开发任务比较紧迫,不同的同事在不同的时期放入了jar版本各不相同, 看到那么多混乱的jar,真是操心.笔者曾花了大概半个下午的时间,把jar版本整理好,编入pom.xml中,从那个时候,笔者本地项目的jar版本算是交给maven托管了.顿时间心里舒畅了一会儿.心里也计划着和项目组大 家一起统一使用maven管控jar版本混乱的问题.可是事实