转:http://blog.sina.com.cn/s/blog_8417657f0101lskw.html

log4j的强大功能无可置疑,但实际应用中免不了遇到某个功能需要输出独立的日志文件的情况,怎样才能把所需的内容从原有日志中分离,形成单独的日志文件呢?其实只要在现有的log4j基础上稍加配置即可轻松实现这一功能。

1)先看一个常见的log4j.properties文件,它是在控制台和daily.log文件中记录日志:

log4j.rootLogger=error,dailyLog,stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

log4j.appender.dailyLog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyLog.File=../logs/daily.log
log4j.appender.dailyLog.Append=true
log4j.appender.dailyLog.Threshold=ERROR
log4j.appender.dailyLog.DatePattern='.'yyyy-MM-dd
log4j.appender.dailyLog.layout=org.apache.log4j.PatternLayout
log4j.appender.dailyLog.layout.ConversionPattern=%5p:%d - %m%n

2)如果想对不同的功能模块输出不同的文件,怎么操作?
如:
用户基础信息模块路径为:com.isoft.visa.baseinf
它下面有个类:com.isoft.visa.baseinf.service.impl.UserInfo
private Log log = LogFactory.getLog(UserInfo.class);

然后在log4j.properties中加入:
log4j.logger.com.isoft.visa.baseinf=info,userLog,stdout
log4j.appender.userLog=org.apache.log4j.FileAppender
log4j.appender.userLog.File=../logs/userinfo.log
log4j.appender.userLog.Append=true
log4j.appender.userLog.Threshold=info
log4j.appender.userLog.layout=org.apache.log4j.PatternLayout
log4j.appender.userLog.layout.ConversionPattern==%d %p [%c] - %m%n

注:也就是让com.isoft.visa.baseinf模块下所有的logger使用log4j.appender.userLog所做的配置。

3)自定义“别名”的使用,相当于2的变种。
同上模块:
private Log log = LogFactory.getLog("userInfoLog");

然后在log4j.properties中加入:
log4j.logger.userInfoLog=info,userLog,stdout
log4j.appender.userLog=org.apache.log4j.FileAppender
log4j.appender.userLog.File=../logs/userinfo.log
log4j.appender.userLog.Append=true
log4j.appender.userLog.Threshold=info
log4j.appender.userLog.layout=org.apache.log4j.PatternLayout
log4j.appender.userLog.layout.ConversionPattern==%d %p [%c] - %m%n

注:也就是在用logger时给它一个自定义的名字(如这里的"userInfoLog"),然后在log4j.properties中做出相应配置即可。,在这种模式下,即使在同一个类中也能定义多个不同输出的log.
在类中调用代码如下:
private Log loggerError = LogFactory.getLog("userInfoLogError");
private Log loggerInfo = LogFactory.getLog("userInfoLogInfo");

4)自定义的日志默认是同时输出到log4j.rootLogger所配置的日志中的,如何能只让它们输出到自己指定的日志中呢?别急,这里有个开关:
  log4j.additivity.userInfoLog = false
 它用来设置是否同时输出到log4j.rootLogger所配置的日志中,设为false就不会输出到其它地方啦!注意这里的"userInfoLog"是你在程序中给logger起的那个自定义的名字!
  如果你说,我只是不想同时输出这个日志到log4j.rootLogger所配置的logfile中,stdout里我还想同时输出呢!那也好办,如:
  log4j.logger.userInfoLog=DEBUG, userLog, stdout

附2:
转:http://www.cnblogs.com/Scott007/p/3269018.html

日志的打印,在程序中是必不可少的,如果需要将不同的日志打印到不同的地方,则需要定义不同的Appender,然后定义每一个Appender的日志级别、打印形式和日志的输出路径。

1 log4j输出多个自定义日志文件

如果在实际应用中需要输出独立的日志文件,怎样才能把所需的内容从原有日志中分离,形成单独的日志文件呢?

先看一个常见的log4j.properties文件,它是在控制台和test.log文件中记录日志:

 1 log4j.rootLogger=DEBUG, stdout, logfile
 4
 5 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
 7 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
 9 log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
12
13 log4j.appender.logfile=org.apache.log4j.RollingFileAppender
15 log4j.appender.logfile.File=log/test.log
17 log4j.appender.logfile.MaxFileSize=128MB
19 log4j.appender.logfile.MaxBackupIndex=3
21 log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
23 log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n

  如果在同一类中需要输出多个日志文件呢?其实道理是一样的,先在Test.java中定义:

private static Log logger1 = LogFactory.getLog("mylogger1");

private static Log logger2 = LogFactory.getLog("mylogger2");

  log4j.properties中配置如下:

 1 log4j.logger.mylogger1=DEBUG,test1
 2 log4j.appender.test1=org.apache.log4j.FileAppender
 3 log4j.appender.test1.File=log/test1.log
 4 log4j.appender.test1.layout=org.apache.log4j.PatternLayout
 5 log4j.appender.test1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
 6
 7 log4j.logger.mylogger2=DEBUG,test2
 8 log4j.appender.test2=org.apache.log4j.FileAppender
 9 log4j.appender.test2.File=log/test2.log
10 log4j.appender.test2.layout=org.apache.log4j.PatternLayout
11 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的配置如下:

 1 log4j.rootLogger=DEBUG,INFOLOG,DEBUGLOG
 2
 3 #info log
 4 log4j.appender.INFOLOG =org.apache.log4j.DailyRollingFileAppender
 5 log4j.appender.INFOLOG.File= ${log.dir}/${log.info.file}
 6 log4j.appender.INFOLOG.DatePattern=.yyyy-MM-dd
 7 log4j.appender.INFOLOG.Threshold=INFO
 8 log4j.appender.INFOLOG.layout=org.apache.log4j.PatternLayout
 9 log4j.appender.INFOLOG.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n
11
12 #debug log
13 log4j.appender.DEBUGLOG =org.apache.log4j.RollingFileAppender
14 log4j.appender.DEBUGLOG.File= ${log.dir}/${log.debug.file}
15 log4j.appender.DEBUGLOG.Threshold=DEBUG
16 log4j.appender.DEBUGLOG.MaxFileSize=128MB
17 log4j.appender.DEBUGLOG.MaxBackupIndex=3
18 log4j.appender.DEBUGLOG.layout=org.apache.log4j.PatternLayout
19 log4j.appender.DEBUGLOG.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n

此时,在使用log打印日志之前,需要利用System定义日志的输出路径和文件名的环境变量:

System.setProperty(“log.dir”, logDir);

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输出多个自定义日志文件、动态配置多个日志文件相关推荐

  1. Envoy实现.NET架构的网关(一)静态配置与文件动态配置

    什么是Gateway 在微服务体系结构中,如果每个微服务通常都会公开一组精细终结点,这种情况可能会有以下问题 如果没有 API 网关模式,客户端应用将与内部微服务相耦合. 在客户端应用中,单个页面/屏 ...

  2. 海康摄像头二次开发动态配置.dll与.so文件

    需求 再对海康摄像头进行二次开发时,需要将海康提供的.dll(window)文件或.so(linux)文件通过路径的方式进行配置,项目在window上开发.在linux上进行部署,另一方面在linux ...

  3. 大数据项目之电商数仓、日志采集Flume配置概述、日志采集Flume配置实操

    文章目录 4. 用户行为数据采集模块 4.3 日志采集Flume 4.3.2 日志采集Flume配置概述 4.3.2.1 TailDirSource 4.3.2.2 KafkaChannel 4.3. ...

  4. 配置ftp服务器实现文件传输,配置ftp服务器实现文件传输

    配置ftp服务器实现文件传输 内容精选 换一换 云堡垒机支持文件传输功能,以及审计传输的文件.Linux主机和Windows主机的文件传输方式有所区别.Linux主机上传/下载文件,可选择Web运维和 ...

  5. (02)Cartographer源码无死角解析-(04) 熟悉bag文件,配置.launch与.lua文件,初步调参

    讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解(02)Cartographer源码无死角解析-链接如下: (02)Cartographer源码无死角解析- (00)目录 ...

  6. log4j输出多个自定义日志文件

    导入包 commons-logging-1.1.1.jar log4j-1.2.16.jar 如果在实际应用中需要输出独立的日志文件,怎样才能把所需的内容从原有日志中分离,形成单独的日志文件呢? 先看 ...

  7. linux log4j2.xml,动态配置log4j2.xml日志输出文件的位置

    目标:根据启动jar时传进main()的参数动态修改日志位置 一.修改启动项 MainMapLookup.setMainArguments(args); 注:不要在lookup设置之前初始化log(如 ...

  8. log4j2自定义动态配置日志

    项目需求 1.平台日志:Spring Boot项目中接入log4j2日志,公共配置作平台日志. 2.业务日志:为了方便定位业务问题自定义动态日志,根据不同业务输出不同名称的日志文件. 思路分析 第一个 ...

  9. Nginx日志文件的配置

    Nginx日志文件的配置 Nginx的日志文件,默认在Nginx程序安装目录的logs二级目录下. 与Nginx日志相关的指令有两条 log_format,用来设置日志的记录格式. Access_lo ...

最新文章

  1. 《因果学习周刊》第6期:因果推荐系统
  2. DB2 catalog
  3. 为 springboot 添加 debug功能
  4. 惊呆!到2020年三大运营商5G投入将达1800亿美元
  5. c语言教程 define,C语言中define的用法
  6. [Luogu P2801]教主的魔法
  7. java 可重入锁 clh_Java可重入锁原理
  8. 解决Robot Framework运行时没有Log的方案
  9. angular6项目中使用echarts图表的方法(有一个坑,引用报错)
  10. 深入理解JAVA虚拟机大全
  11. matlab聚类分析工具箱,matlab聚类工具箱
  12. TOEFL资料 280多个
  13. Nvivo简介、学习经验分享及教程
  14. 音频怎么转换成mp3格式
  15. 什么是非参数检验?应该如何操作与分析?
  16. linux 命令杂集
  17. 四叉树 Quadtrees
  18. django-spirt 论坛主题
  19. 新闲鱼验机源码+独立后台
  20. linux系统下u盘变成只读模式如何修改

热门文章

  1. GB2312 编码(转)
  2. html hr线条粗细,html中hr怎么设置粗细
  3. cj.exceptions.CJException: Access denied for user XX to database 问题解决记录
  4. U8g2库支持的屏幕类型总表以及构造器选择
  5. 手机控制NodeMCU实现远程电脑开关机
  6. 想搭建一个专属于你的网站吗??新手向超详细攻略
  7. Python神经网络是这样识别手写字符哒?
  8. java 必须try catch的异常_【java基础之异常】死了都要try,不淋漓尽致地catch我不痛快!...
  9. 高通QCA6174A WiFi/蓝牙二合一芯片
  10. 运算放大器电路PCB的设计技巧