jvm参数 log4j 日志路径_log4j高级技巧--动态配置日志输出文件的位置

og4j高级技巧--动态配置日志输出文件的位置

log4j的通常用法就是通过在其配置文件(xml或properties)中直接将输出文件写死,在很多情况下,这样做是非常简单而又有效的。但这样做的缺点是,如果想让这个web应用运行起来,必须要修改log4j的配置文件。比如struts2.x中log4j的配置,每个人都得按照自己的路径进行配置。这无疑增加了配置的复杂性。因此,在某些情况下,我们更希望日志文件默认就输出到web应用的某个目录里,比如如果想输出日志到webroot/logs/log.log中,这该如何实现呢?

在配置文件中(我是在properties文件中使用的,xml我未测试,理论上一样)使用${user.dir}类似的方式,这里变量必须是System.getPropertities里的变量。而我们则就是要利用这一点。首先在一个Listener里或高优先级、自启动的Servlet里获得应用的发布目录,这是很容易得到的,比如String home = servletContext.getRealPath("/");然后调用System.setPropertity("web_home",home),“web_home”名字可以随意。则log4j.properties里的配置为:log4j.appender.TRACE.File=${web_home}/logs/log.log.则日志会输出到web应用发布目录里的logs目录里。

==============================

from : http://www.blogjava.net/hello-yun/archive/2012/07/29/384259.html

通常在项目中我们都会把log4j的配置放到classpath里, log4j的输出路径也就直接写在log4j.xml或log4j.properties中了, 原本就这样了不用麻烦什么了,可是在我们公司什么都要配置分离。 所以 log4j的输出目录也就不再开发人员指定了, 那么如何做到分离呢。 有的是直接把log4j.xml或properties文件分离,在项目启动时加载进来, 那么这样一来 整个log4j的配置文件都不由开发人员控制, 可是通常log4j的配置由运维人员配置的东东也就一个输出目录了, 而log4j的其它配置还是由开发人员控制, 这时可以用${},来指定 log4j.home由容器启动时指定,jvm中加上   -Dlog4j.home=D:/log 这样在Log4j.xml中的${log4j.home}就知道了实际的输出目录了, 同样也可以把这个log4j.home放到分离的properties中,这时候可以 在容器启动时在监听器来解析properties,获取到log4j.home变量后 把值设置到system.env中 System.setProperties("log4j.home"); 这样一来 ,log4j一样可以找到输出目录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值