log4j输出多个自定义日志文件(转)
如果在实际应用中需要输出独立的日志文件,怎样才能把所需的内容从原有日志中分离,形成单独的日志文件呢?
先看一个常见的log4j.properties文件,它是在控制台和test.log文件中记录日志:
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=log/test.log
log4j.appender.logfile.MaxFileSize=128MB
log4j.appender.logfile.MaxBackupIndex=3
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
如果在同一类中需要输出多个日志文件呢?其实道理是一样的,先在Test.java中定义:
private static Log logger2 = LogFactory.getLog("mylogger2");
log4j.properties中配置如下:
log4j.appender.test1=org.apache.log4j.FileAppender
log4j.appender.test1.File=log/test1.log
log4j.appender.test1.layout=org.apache.log4j.PatternLayout
log4j.appender.test1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
log4j.logger.mylogger2=DEBUG,test2
log4j.appender.test2=org.apache.log4j.FileAppender
log4j.appender.test2.File=log/test2.log
log4j.appender.test2.layout=org.apache.log4j.PatternLayout
log4j.appender.test2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
不同日志要使用不同的logger(如输出到test1.log的要用logger1.info("abc"))。
还有一个问题,就是这些自定义的日志默认是同时输出到log4j.rootLogger所配置的日志中的,如何能只让它们输出到自己指定的日志中呢?别急,这里有个开关:
log4j.additivity. mylogger1 = false
它用来设置是否同时输出到log4j.rootLogger所配置的日志中,设为false就不会输出到其它地方了。
但是这种方式有个小缺陷,那就是打印的日志中类名只能是mylogger或者mylogger2。
2 动态配置路径
若程序需要的日志路径需要不断的变化,而又不可能每次都去改配置文件,此时可以利用环境变量来解决。
log4j的配置如下:
#info log
log4j.appender.INFOLOG =org.apache.log4j.DailyRollingFileAppender
log4j.appender.INFOLOG.File= ${log.dir}/${log.info.file}
log4j.appender.INFOLOG.DatePattern=.yyyy-MM-dd
log4j.appender.INFOLOG.Threshold=INFO
log4j.appender.INFOLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.INFOLOG.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
#debug log
log4j.appender.DEBUGLOG =org.apache.log4j.RollingFileAppender
log4j.appender.DEBUGLOG.File= ${log.dir}/${log.debug.file}
log4j.appender.DEBUGLOG.Threshold=DEBUG
log4j.appender.DEBUGLOG.MaxFileSize=128MB
log4j.appender.DEBUGLOG.MaxBackupIndex=3
log4j.appender.DEBUGLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.DEBUGLOG.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
此时,在使用log打印日志之前,需要利用System定义日志的输出路径和文件名的环境变量:
System.setProperty(“log.info.file”, infoLogFileName);
System.setProperty(“log.debug.file”, debugLogFileName);
附:Pattern参数的格式含义
%c 输出日志信息所属的类的全名
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd HH:mm:ss },输出类似:2013-8-19- 22:10:28
%f 输出日志信息所属的类的类名
%l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行
%m 输出代码中指定的信息,如log(message)中的message
%n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推
%r 输出自应用启动到输出该日志信息所耗费的毫秒数
%t 输出产生该日志事件的线程名
log4j输出多个自定义日志文件(转)的更多相关文章
- log4j输出多个自定义日志文件,动态配置路径
Log4J的配置文件(Configuration File)就是用来设置记录器的级别.存放器和布局的,它可接key=value格式的设置或xml格式的设置信息.通过配置,可以创建出Log4J的运行环境 ...
- log4j 输出原始数据到指定日志文件
项目中需要将上传的数据输出到指定的log文件,之前对log4j缺少深入认识,普遍将整个应用的日志到输出到一个文件. 在经理的帮助下,业务数据可以直接输出到指定的log文件,现将配置及使用流程整理一下. ...
- log4j配置输出到多个日志文件
通常我们项目里,有一些重要的日志想单独的输出到指定的文件,而不是全总输出到系统的日志文件中.那么我们log4j为我们提供了这种功能,以下我们来一步一步看是怎么做的.这里以property的配置方式写. ...
- log4j配置输出到多个日志文件(转)
參考资料:http://logging.apache.org/log4j/1.2/manual.html 通常我们项目里,有一些重要的日志想单独的输出到指定的文件,而不是全总输出到系统的日志文件中.那 ...
- C# 插件热插拔 .NET:何时应该 “包装异常”? log4.net 自定义日志文件名称
C# 插件热插拔 所谓热插拔就是插件可以 在主程序不重新启动的情况直接更新插件, 网上有很多方案: https://www.cnblogs.com/happyframework/p/3405811 ...
- log配置文件log4j.propeties(配置保存日志文件的相对路径)
log配置文件log4j.propeties(配置保存日志文件的相对路径) log4j.propeties文件: #日志的4种级别ERROR(错误).WARN(警告潜在的错误).INFO(粗粒度信息) ...
- log4j分离日志输出 自定义过滤 自定义日志文件
普通的log4j.properties 定义: ### set log levels ### log4j.rootLogger = debug,D,E ## Disable other log log ...
- log4j配置每天生成一个日志文件
首先需要配置web.xml里面: <servlet-name>log4j-init</servlet-name> <servlet-class>com.free.c ...
- Tomcat输出保存JVM GC日志文件
当系统出现问题时,分析java虚拟机GC日志可以帮助我们定位问题,一般来说, 我们可以通过制定JVM参数使tomcat保存GC日志文件,具体实现如下: Windows下: 找到tomcat的解压目录, ...
随机推荐
- CSRF简单介绍及利用方法
x00 简要介绍 CSRF(Cross-site request forgery)跨站请求伪造,由于目标站无token/referer限制,导致攻击者可以用户的身份完成操作达到各种目的.根据HTTP请 ...
- thinkphp 点击分类显示分类下的文章(完整)
控制器 <?php // 本类由系统自动生成,仅供测试用途 class IndexAction extends Action { public function index(){ $cate=M ...
- 关于Struts2有时候出现的莫名其妙的错误
有的时候突然出现红色叉叉,但是又不知道哪里错了,解决方法: 1.刷新项目文件夹 2.重启MyEclipse
- Understanding the difficulty of training deep feedforward neural networks
本文作者为:Xavier Glorot与Yoshua Bengio. 本文干了点什么呢? 第一步:探索了不同的激活函数对网络的影响(包括:sigmoid函数,双曲正切函数和softsign y = x ...
- 时间操作(struct tm、time_t)求指定日期 前n天的日期
1.在标准C/C++中,我们可通过tm结构来获得日期和时间,tm结构在time.h中的定义如下: #ifndef _TM_DEFINED struct tm { int tm_sec; /* 秒–取值 ...
- e675. 翻转缓冲图像
// To create a buffered image, see e666 创建缓冲图像 // Flip the image vertically AffineTransform tx = Aff ...
- struct iphdr中的__LITTLE_ENDIAN_BITFIELD和__BIG_ENDIAN_BITFIELD
__LITTLE_ENDIAN_BITFIELD表示小端序,__BIG_ENDIAN_BITFIELD表示大端序. /usr/include/linux/ip.h中有一段代码定义了ip首部的结构体,例 ...
- 动态生成的DOM不会触发onclick事件的原因及解决方法
最近朋友在做一个项目的时候,遇到动态加载微博内容,然后点击“展开评论”后获取该微博的所有评论.这里使用了动态加载的<span mid='123456789′ class='get_comment ...
- 【matlab】图像去噪的代码测试
%% 自己设置频域的滤波窗口 girl=imread('F:\Users\*****\Pictures\CGS_stripe1.bmp'); girl=rgb2gray(girl); girl=im2 ...
- VS2008 Output窗口自动滚动
Output窗口默认是自动滚动的,活动光标始终处于最后一行. 但是有时候因为某些操作可能导致Output窗口的自动滚动停止. 如何恢复自动滚动呢? 使用快捷键操作即可:Ctrl + End