您的位置:首页 > 其它

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

2012-08-02 16:18 239 查看
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的其它配置还是由开发人员控制,

这时可以用${},来指定

<param name="file" value="${log4j.home}/test.log" />

log4j.home由容器启动时指定,jvm中加上 -Dlog4j.home=D:/log

这样在Log4j.xml中的${log4j.home}就知道了实际的输出目录了,

同样也可以把这个log4j.home放到分离的properties中,这时候可以

在容器启动时在监听器来解析properties,获取到log4j.home变量后

把值设置到system.env中

System.setProperties("log4j.home");

这样一来 ,log4j一样可以找到输出目录
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: