`
jiagou
  • 浏览: 2532540 次
文章分类
社区版块
存档分类
最新评论

log4j输出多个自定义日志文件,动态配置路径

 
阅读更多

1.<wbr><wbr><wbr><wbr>log4j输出多个自定义日志文件</wbr></wbr></wbr></wbr>

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

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

<wbr></wbr>

log4j.rootLogger=DEBUG, stdout, logfile

<wbr></wbr>

log4j.category.org.springframework=ERROR

log4j.category.org.apache=INFO

<wbr></wbr>

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

<wbr></wbr>

log4j.appender.logfile=org.apache.log4j.RollingFileAppender

log4j.appender.logfile.File=${myweb.root}/WEB-INF/log/myweb.log

log4j.appender.logfile.MaxFileSize=512KB

log4j.appender.logfile.MaxBackupIndex=5

log4j.appender.logfile.layout=org.apache.log4j.PatternLayout

log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

  

如果想对不同的类输出不同的文件(以cn.com.Test为例),先要在Test.java中定义:

private static Log logger = LogFactory.getLog(Test.class);

  然后在log4j.properties中加入:

log4j.logger.cn.com.Test= DEBUG, test

log4j.appender.test=org.apache.log4j.FileAppender

log4j.appender.test.File=${myweb.root}/WEB-INF/log/test.log

log4j.appender.test.layout=org.apache.log4j.PatternLayout

log4j.appender.test.layout.ConversionPattern=%d %p [%c] - %m%n

  也就是让cn.com.Test中的logger使用log4j.appender.test所做的配置。

<wbr></wbr>

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

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

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

  然后在log4j.properties中加入:

log4j.logger.myTest1= DEBUG, test1

log4j.appender.test1=org.apache.log4j.FileAppender

log4j.appender.test1.File=${myweb.root}/WEB-INF/log/test1.log

log4j.appender.test1.layout=org.apache.log4j.PatternLayout

log4j.appender.test1.layout.ConversionPattern=%d %p [%c] - %m%n

  

log4j.logger.myTest2= DEBUG, test2

log4j.appender.test2=org.apache.log4j.FileAppender

log4j.appender.test2.File=${myweb.root}/WEB-INF/log/test2.log

log4j.appender.test2.layout=org.apache.log4j.PatternLayout

log4j.appender.test2.layout.ConversionPattern=%d %p [%c] - %m%n

  也就是在用logger时给它一个自定义的名字(如这里的"myTest1"),然后在log4j.properties中做出相应配置即可。别忘了不同日志要使用不同的logger(如输出到test1.log的要用logger1.info("abc"))。

<wbr></wbr>

  还有一个问题,就是这些自定义的日志默认是同时输出到log4j.rootLogger所配置的日志中的,如何能只让它们输出到自己指定的日志中呢?别急,这里有个开关:

log4j.additivity.myTest1 = false

  它用来设置是否同时输出到log4j.rootLogger所配置的日志中,设为false就不会输出到其它地方啦!注意这里的"myTest1"是你在程序中给logger起的那个自定义的名字!

如果你说,我只是不想同时输出这个日志到log4j.rootLogger所配置的logfile中,stdout里我还想同时输出呢!那也好办,把你的log4j.logger.myTest1 = DEBUG, test1改为下式就OK啦!

log4j.logger.myTest1=DEBUG, test1, stdout

<wbr></wbr>

2.动态配置路径

若程序需要的日志路径需要不断的变化,而又不可能每次都去改配置文件,那就要采取两种方法。

第一种

<wbr><wbr><wbr><wbr><wbr><wbr><wbr> log4j的配置文件支持windows的环境变量,格式类似velocity:${env},那我们就用环境变量表示可能会变化的路径。上文已使用“log4j.appender.<span style="color:blue">test1</span>.File=${myweb.root}/WEB-INF/log/<strong>test1.log</strong>”。</wbr></wbr></wbr></wbr></wbr></wbr></wbr>

第二种

<wbr><wbr><wbr><wbr><wbr><wbr> 这种方法是不用配置文件,而是在程序里用代码配置,代码是活的,所以路径肯定可以写活。示例如下:</wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

view plaincopy to clipboardprint
  1. Logger<wbr>myTest<wbr>=<wbr>Logger.getLogger(</wbr></wbr></wbr>"myTest");<wbr><wbr></wbr></wbr>
  2. <wbr><wbr></wbr></wbr>
  3. Layout<wbr>layout<wbr>=<wbr><span>new</span><span><wbr>PatternLayout(</wbr></span><span>"%d<wbr>%p<wbr>[%c]<wbr>-<wbr>%m%n"</wbr></wbr></wbr></wbr></span><span>);<wbr><wbr></wbr></wbr></span></wbr></wbr></wbr>
  4. <wbr><wbr></wbr></wbr>
  5. Appender<wbr>appender<wbr>=<wbr><span>new</span><span><wbr>FileAppender(layout,<wbr>logFilePath);<wbr><wbr></wbr></wbr></wbr></wbr></span></wbr></wbr></wbr>
  6. <wbr><wbr></wbr></wbr>
  7. myTest.addAppender(appender);<wbr><wbr></wbr></wbr>
Logger myTest = Logger.getLogger("myTest"); Layout layout = new PatternLayout("%d %p [%c] - %m%n"); Appender appender = new FileAppender(layout, logFilePath); myTest.addAppender(appender);

<wbr></wbr>

<wbr>附:ConversionPattern参数的格式含义<br></wbr>

<wbr></wbr>

%c<wbr>输出日志信息所属的类的全名<br> %d<wbr>输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd<wbr>HH:mm:ss<wbr>},输出类似:2002-10-18-<wbr>22:10:28<br> %f<wbr>输出日志信息所属的类的类名<br> %l<wbr>输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行<br> %m<wbr>输出代码中指定的信息,如log(message)中的message<br> %n<wbr>输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”<br> %p<wbr>输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推<br> %r<wbr>输出自应用启动到输出该日志信息所耗费的毫秒数<br> %t<wbr>输出产生该日志事件的线程<span style="font-size:13px">名</span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

分享到:
评论

相关推荐

    log4j输出多个自定义路径的日志文件小例子

    本工程主要实现log4j输出多个自定义路径的日志文件,为方便大家使用

    java自定义日志输出文件(log4j日志文件输出多个自定义日志文件)

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

    log4j 日志服务器

    log4j 日志服务器 一个系统可能有多个子系统组成,这些子系统都有自己的日志,并且运行在不同的操作系统和主机上,收集这些日志对运营人员来说也比较困难。 因此决定在平台中采用日志服务器来做到集中日志管理,平台...

    log4j使用实战

    当前日志放在log4j.appender.File.File=${user.dir}/logs/hmiservice.log对应的命名文件中, 过了时间将原日志文件命名为原文件名后加上log4j.appender.File.DatePattern='.'yyyy-MM-dd-HH对应格式的日期, 注意不能...

    Nginx自定义访问日志的配置方式

    日志开关在Nginx配置文件(/etc/nginx/nginx.conf)中设置,两种日志都可以选择性关闭,默认都是打开的。 访问日志主要记录客户端访问Nginx的每一个请求,格式可以自定义。通过访问日志,你可以得到用户地域来源、...

    崩溃日志上传框架LogReport.zip

    LogReport是一个崩溃日志上传框架 ,当App崩溃的时,把崩溃信息保存到本地的同时,自动给GitHub提交崩溃issue,你只需要几句,就能完成所有配置,更多细节请了解下方另外,崩溃信息支持邮件上传和HTTP上传,自动提交...

    如何编写批处理文件批处理文件批处理文件

    这个带引号的字符串包括一个或多个 指定不同解析选项的关键字。这些关键字为: eol=c - 指一个行注释字符的结尾(就一个) skip=n - 指在文件开始时忽略的行数。 delims=xxx - 指分隔符集。这个替换了空格和跳格键的...

    log4jx:nodejs日志打印(加强版)

    只需在现有的 log4js 打印日志中添加几行代码即可使用自定义布局。 您可以自由添加进程,执行文件路径,跟踪功能,行号,列号,内存控制,端口号等。@data是打印内容的输出。 @data在布局之前和之后的布局可以增加...

    Android开发人员不得不收集的代码

    startActivities : 启动多个 Activity startHomeActivity : 回到桌面 getActivityList : 获取 Activity 栈链表 getLauncherActivity : 获取启动项 Activity getTopActivity : 获取栈顶 Activity ...

    SpringBoot新手学习手册

    6.1使用log4j记录日志 30 6.2使用AOP统一处理Web请求日志 32 6.3Spring Boot集成lombok让代码更简洁 33 七、 缓存支持 35 7.1注解配置与EhCache使用 35 7.2使用Redis集成缓存 37 八、 热部署 37 8.1 什么是热...

    citrix 中文管理操作手册

    同时将多个已发布应用程序设置导出到文件 58 从文件中导入已发布应用程序设置 58 使虚拟 IP 地址对应用程序可用 59 虚拟 IP 地址工作原理 60 虚拟环回 60 绑定应用程序 60 确定应用程序是否需要使用虚拟 IP 地址 61 ...

    springboot参考指南

    自定义日志配置 v. 26. 开发Web应用 i. 26.1. Spring Web MVC框架 i. 26.1.1. Spring MVC自动配置 ii. 26.1.2. HttpMessageConverters Spring Boot参考指南 3 iii. 26.1.3. MessageCodesResolver iv. 26.1.4. 静态...

    C#开发实例大全(基础卷).软件开发技术联盟(带详细书签) PDF 下载

    实例220 动态创建多个Button控件 295 11.2 TextBox控件应用 296 实例221 制作多行文本框 296 实例222 制作密码文本框 297 实例223 在TextBox控件中显示回车符 297 实例224 只允许输入数字的TextBox控件 298 实例225 ...

    ichat171聊天室

    ... ...[*] 修正了利用多个/*自定义趣句功能的$u$u$u$u刷屏的漏洞,自定义趣语内最多支持5个$u变量 [*] 取消了原template 1.ini文件中颜色定义文件 Color_ini 的设置,color.ini也不在有作用了。

    网管教程 从入门到精通软件篇.txt

    CCB:Visual Basic动态按钮配置文件 CCH:Corel图表文件 CCO:CyberChat数据文件 CCT:Macromedia Director Shockwave投影 CDA:CD音频轨道 CDF:Microsoft频道定义格式文件 CDI:Philip的高密盘交互格式 CDM...

    X-Blog V1.0 正式版

    更新发表日志时多个逗号连用可能造成IIS崩溃的BUG 5.修正一些其它小BUG V1.0 Beta1更新 1.添加Robot.txt文件 2.修正后台静态生成首页BUG 3.更新Skin.asp文件,可自由设置首页是显示图片还是日志,模板机制删除...

    beautiful-log

    仅显示并突出显示代码(app / ..)的文件路径。 路径不再冗长,而是从项目根目录缩小为相对路径。 状态码 您再也不会错过响应的安全性。 响应完成日志通过直观的颜色告诉您的应用是否正确响应。 您可以根据状态...

Global site tag (gtag.js) - Google Analytics