Log4j不同级别输出到不同文件的几种方式
2017-01-17 23:55
525 查看
log4j已经是古董了,但是现在项目还在用,需要用到不同级别输出到不同文件,所以把几种实现方式记录下来,备忘!
下面的几种配置都是使用properties的情况,但是xml的原理也一样.
使用LevelRangeFilter
使用LevelMatchFilter
自定义Appender
最后再贴出下面一种需求的配置文件
项目info和error级别日志分开记录为 allInfo,allError文件
其中A模块的日志单独记录为afile
其中A模块的info级别日志只在afile记录,不在allinfo记录(info只记录一次)
其中A模块的error级别日志在afile,allError中都记录
下面详细说明:
1.使用LevelRangeFilter
这个应该是3种里面最方便的,配置如下
这里通过Threshold指定输出级别为INFO,但是默认的大于INFO的也会输出.
下面增加的filter指定了最大级别和最小级别,都为INFO,所以最终只会输出INFO级别.
2.使用LevelMatchFilter
这个配置就稍微多点了,例如,我们输出INFO级别的,需要下面配置
这里要注意的就是指定匹配级别INFO为true后,还需要把其他级别都设置为false,否则其他级别还是会输出(包括低于Threshold指定的级别).
3.自定义Appender
一种常见的配置文件如下
这里我们通过Threshold已经指定了级别,但是由于默认的实现会输出大于等于指定级别的,所以我们可以修改下这个默认实现.
然后配置文件中使用自定义的类
这样就可以了.
当然除了上面的3种方法,还有自定义一个类,里面不同级别指向不同的文件
方法很多,找个最简单的就可以了.
最后再贴出下面一种需求的配置文件
1. 项目info和error级别日志分开记录为 allInfo,allError文件
2. 其中A模块的日志单独记录为afile
3. 其中A模块的info级别日志只在afile记录,不在allinfo记录(info只记录一次)
4. 其中A模块的error级别日志在afile,allError中都记录
在代码中使用A模块的单独输出,则
下面的几种配置都是使用properties的情况,但是xml的原理也一样.
使用LevelRangeFilter
使用LevelMatchFilter
自定义Appender
最后再贴出下面一种需求的配置文件
项目info和error级别日志分开记录为 allInfo,allError文件
其中A模块的日志单独记录为afile
其中A模块的info级别日志只在afile记录,不在allinfo记录(info只记录一次)
其中A模块的error级别日志在afile,allError中都记录
下面详细说明:
1.使用LevelRangeFilter
这个应该是3种里面最方便的,配置如下
log4j.appender.InfoFile = org.apache.log4j.RollingFileAppender log4j.appender.InfoFile.File = logs/info1.log log4j.appender.InfoFile.MaxFileSize = 10MB log4j.appender.InfoFile.Threshold = INFO log4j.appender.InfoFile.layout = org.apache.log4j.PatternLayout log4j.appender.InfoFile.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n log4j.appender.InfoFile.filter.F1=org.apache.log4j.varia.LevelRangeFilter log4j.appender.InfoFile.filter.F1.LevelMin=INFO log4j.appender.InfoFile.filter.F1.LevelMax=INFO
这里通过Threshold指定输出级别为INFO,但是默认的大于INFO的也会输出.
下面增加的filter指定了最大级别和最小级别,都为INFO,所以最终只会输出INFO级别.
2.使用LevelMatchFilter
这个配置就稍微多点了,例如,我们输出INFO级别的,需要下面配置
log4j.appender.InfoFile2 = org.apache.log4j.RollingFileAppender log4j.appender.InfoFile2.File = logs/info2.log log4j.appender.InfoFile2.MaxFileSize = 10MB log4j.appender.InfoFile2.Threshold = INFO log4j.appender.InfoFile2.layout = org.apache.log4j.PatternLayout log4j.appender.InfoFile2.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n log4j.appender.InfoFile2.filter.F1=org.apache.log4j.varia.LevelMatchFilter log4j.appender.InfoFile2.filter.F1.levelToMatch=INFO log4j.appender.InfoFile2.filter.F1.AcceptOnMatch=true log4j.appender.InfoFile2.filter.F2=org.apache.log4j.varia.LevelMatchFilter log4j.appender.InfoFile2.filter.F2.levelToMatch=ERROR log4j.appender.InfoFile2.filter.F2.AcceptOnMatch=false log4j.appender.InfoFile2.filter.F3=org.apache.log4j.varia.LevelMatchFilter log4j.appender.InfoFile2.filter.F3.levelToMatch=WARN log4j.appender.InfoFile2.filter.F3.AcceptOnMatch=false log4j.appender.InfoFile2.filter.F4=org.apache.log4j.varia.LevelMatchFilter log4j.appender.InfoFile2.filter.F4.levelToMatch=DEBUG log4j.appender.InfoFile2.filter.F4.AcceptOnMatch=false
这里要注意的就是指定匹配级别INFO为true后,还需要把其他级别都设置为false,否则其他级别还是会输出(包括低于Threshold指定的级别).
3.自定义Appender
一种常见的配置文件如下
log4j.rootLogger=INFO,InfoFile3,errorFile3 log4j.appender.InfoFile3 = org.apache.log4j.RollingFileAppender log4j.appender.InfoFile3.File = logs/info3.log log4j.appender.InfoFile3.MaxFileSize = 10MB log4j.appender.InfoFile3.Threshold = INFO log4j.appender.InfoFile3.layout = org.apache.log4j.PatternLayout log4j.appender.InfoFile3.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n log4j.appender.errorFile3 = org.apache.log4j.RollingFileAppender log4j.appender.errorFile3.File = logs/error3.log log4j.appender.errorFile3.MaxFileSize = 10MB log4j.appender.errorFile3.Threshold = ERROR log4j.appender.errorFile3.layout = org.apache.log4j.PatternLayout log4j.appender.errorFile3.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
这里我们通过Threshold已经指定了级别,但是由于默认的实现会输出大于等于指定级别的,所以我们可以修改下这个默认实现.
package com.dingcheng.log; import org.apache.log4j.Priority; import org.apache.log4j.RollingFileAppender; public class MyRollingFileAppender extends RollingFileAppender { @Override public boolean isAsSevereAsThreshold(Priority priority) { return this.getThreshold().equals(priority); } }
然后配置文件中使用自定义的类
log4j.rootLogger=INFO,InfoFile3,errorFile3 log4j.appender.InfoFile3 = com.dingcheng.log.MyRollingFileAppender log4j.appender.InfoFile3.File = logs/info3.log log4j.appender.InfoFile3.MaxFileSize = 10MB log4j.appender.InfoFile3.Threshold = INFO log4j.appender.InfoFile3.layout = org.apache.log4j.PatternLayout log4j.appender.InfoFile3.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n log4j.appender.errorFile3 = com.dingcheng.log.MyRollingFileAppender log4j.appender.errorFile3.File = logs/error3.log log4j.appender.errorFile3.MaxFileSize = 10MB log4j.appender.errorFile3.Threshold = ERROR log4j.appender.errorFile3.layout = org.apache.log4j.PatternLayout log4j.appender.errorFile3.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
这样就可以了.
当然除了上面的3种方法,还有自定义一个类,里面不同级别指向不同的文件
public class LogUtil{ public static void error(String msg) { Logger.getLogger("error").error(msg); } }
方法很多,找个最简单的就可以了.
最后再贴出下面一种需求的配置文件
1. 项目info和error级别日志分开记录为 allInfo,allError文件
2. 其中A模块的日志单独记录为afile
3. 其中A模块的info级别日志只在afile记录,不在allinfo记录(info只记录一次)
4. 其中A模块的error级别日志在afile,allError中都记录
#根设置,输出级别为info级别, 输出文件为 allInfo,allError log4j.rootLogger=INFO,allInfo,allError #定义allInfo的详细配置,只记录info级别 log4j.appender.allInfo = org.apache.log4j.RollingFileAppender log4j.appender.allInfo.File = /logs/allInfo.log log4j.appender.allInfo.MaxFileSize = 50MB log4j.appender.allInfo.Threshold = INFO log4j.appender.allInfo.layout = org.apache.log4j.PatternLayout log4j.appender.allInfo.layout.ConversionPattern =[%p] %-d{yyyy-MM-dd HH:mm:ss} [%t] [%l]--> %m %x %n log4j.appender.allInfo.filter.F1=org.apache.log4j.varia.LevelRangeFilter log4j.appender.allInfo.filter.F1.LevelMin=INFO log4j.appender.allInfo.filter.F1.LevelMax=INFO #定义allError的详细配置,只记录error级别 log4j.appender.allError = org.apache.log4j.RollingFileAppender log4j.appender.allError.File = /data/wuliu-provider/logs/order-error.log log4j.appender.allError.MaxFileSize = 50MB log4j.appender.allError.Threshold = ERROR log4j.appender.allError.layout = org.apache.log4j.PatternLayout log4j.appender.allError.layout.ConversionPattern=[%p] %-d{yyyy-MM-dd HH:mm:ss} [%t] [%l]--> %m %x %n #A模块单独配置,输出级别为INFO,输出文件为 afile,allError ; additivity=false指定不继承根设置 log4j.logger.AMODULE=INFO,afile,allError log4j.additivity.AMODULE = false log4j.appender.afile = org.apache.log4j.RollingFileAppender log4j.appender.afile.File = /data/wuliu-provider/logs/YuanCheng.log log4j.appender.afile.MaxFileSize = 50MB log4j.appender.afile.Threshold = INFO log4j.appender.afile.layout = org.apache.log4j.PatternLayout log4j.appender.afile.layout.ConversionPattern =[%p] %d{yyyy-MM-dd HH\:mm\:ss} [%c]%m%n
在代码中使用A模块的单独输出,则
private static Logger logger = Logger.getLogger("AMODULE");//指定配置文件中的名称
相关文章推荐
- Log4j不同级别输出到不同文件的几种方式
- Log4j按级别输出日志到不同文件配置分析
- Log4j按级别输出日志到不同文件配置分析
- Log4j按级别输出日志到不同文件
- log4j日志输出分级别或模块到不同文件
- 将Log4j按不同级别输出到不同文件【是网上别的童鞋的一篇帖子,但我改了点东西,就属于翻译吧^_^】
- Log4j按级别输出日志到不同文件
- Log4J日志配置详解和自定义log4j日志级别及输出日志到不同文件实现方法
- Log4j按级别输出日志到不同的文件
- Log4j按级别输出日志到不同文件配置分析
- log4j日志输出分级别或模块到不同文件
- log4j日志输出分级别或模块到不同文件
- 如何利用Log4j将不同级别,不同package中Log输出到不同的文件中
- Log4j按级别输出日志到不同文件配置分析
- Log4j按级别输出到不同文件
- Log4j按级别输出日志到不同文件配置分析
- Log4j按级别输出日志到不同的文件2009-09-07 13:29会按日存分割日志文件,并且根据级别输出到不同的文件
- Log4j按级别输出日志到不同的文件
- 【J2EE系列】log4j日志输出分级别或模块到不同文件
- Log4j按级别输出日志到不同文件的实现方法