`
digyso
  • 浏览: 142679 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

现log4j日志文件在相对路径保存

阅读更多

http://spiritfrog.iteye.com/blog/197552

Log4j日志输出路径只能设定成绝对路径,这个在web项目中就变得很不方便了。
比如我想要设定日志保存在webapp/log

参考了网上资料:
http://hi.baidu.com/suofang/blog/item/6cf2befbd1ff07234f4aea90.html
下面是引入内容:

方法一主要是扩展了log4j的RollingFileAppender类,其他的FileAppender同样道理。扩展的方法,就是用一个子类去覆盖setFile方法,这个方法在log4j读取配置文件生成appender的时候调用,传入的就是配置文件中的路径,这样我就可以按照自己的想法在路径前面加上根路径了。这种方法可以在log4j.properties中用相对路径自由配置log4j.appender.A1.File属性来决定生成的日志相对web应用根目录的位置。

方法二是利用服务器vm中已经存在的环境变量如${catalina.home}来设置相对于${catalina.home}的日志路径,日志只能放到服务器子目录里,而且如果是用的其它服务器,则要改对应的环境变量。此方法平台移植不方便。

方法三是扩展ActionServlet类,覆盖其init()方法,新方法中载入log4j.properties位置的参数,可以自由配置log4j的配置文件的名字和存放位置。也可自由配置log4j日志文件的相对于当前应用的路径。

对于第三个方法,作者提出了个问题:
log4j配置文件的位置,不让其在web-inf/classes目录,因为在加载此Servlet之前,服务器如tomcat启动时会自动搜索web-inf目录和web-inf/classes目录中log4j.properties文件,如有则自动加载。log4j属性文件加载后,由于该属性文件中log4j.appender.A1.File的值用的是相对路径,自动加载配置便会出错:
log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: WEB-INF\logs\bysxxglxt.log
(系统找不到指定的路径。)

尽管后面加载扩展的ActionServlet中正确设置了log4j属性文件并正常加载了,但还是报的这个错,怪不爽的。只有更改log4j属性文件名字或者更改其存放位置,让其不能自动加载了,不过还是有两个警告:
log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester.sax).
log4j:WARN Please initialize the log4j system properly.

新的发现:
由于spring也会加载log4j.properties,如果加载不到就往控制台打log信息,总觉得有些碍眼,于是想办法去掉。Spring提供了一个Log4jConfigListener,本身就能通过web.xml中配置来指定位置加载log4j配置文件和log输出路径,注意该listener需要放在spring的Listener之前。
事实上,Log4jConfigListener更适合log4j在web工程中使用,原因如下:
1. 动态的改变记录级别和策略,不需要重启Web应用,如《Effective Enterprise Java》所说。
2. 把log文件定在 /WEB-INF/logs/ 而不需要写绝对路径。
因为 系统把web目录的路径压入一个叫webapp.root的系统变量。这样写log文件路径时不用写绝对路径了.
log4j.appender.logfile.File=${webapp.root}/WEB-INF/logs/myfuse.log
3. 可以把log4j.properties和其他properties一起放在/WEB-INF/ ,而不是Class-Path。
4.log4jRefreshInterval为60000表示 开一条watchdog线程每60秒扫描一下配置文件的变化;
在web.xml 添加

Xml代码 复制代码
  1. <context-param>
  2. <param-name>log4jConfigLocation</param-name>
  3. <param-value>WEB-INF/log4j.properties</param-value>
  4. </context-param>
  5. <context-param>
  6. <param-name>log4jRefreshInterval</param-name>
  7. <param-value>60000</param-value>
  8. </context-param>
  9. <listener>
  10. <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  11. </listener>
分享到:
评论

相关推荐

    log4j简单范例 日志文件是相对路径的

    这个“log4j简单范例 日志文件是相对路径的”示例将展示如何配置Log4j来记录日志,并将日志文件保存在程序运行时的相对路径下。 首先,Log4j的核心组件包括Logger(日志器)、Appender(输出目的地)和Layout(格式...

    Log4j 相对路径配置

    在SSH(Struts、Spring、Hibernate)等Java Web框架中,配置Log4j以使用相对路径是非常常见的需求,这有助于在不同环境下保持日志文件的一致性。以下是关于Log4j相对路径配置的详细说明: 首先,在`Web.xml`文件中...

    使用log4j写日志文件

    在Java应用中使用Log4j进行日志记录的第一步,是创建并配置log4j的属性文件(log4j.properties)。这个文件定义了日志的级别、输出目的地以及日志的格式。以下是一个典型的log4j配置示例: ```properties # 设置根...

    Log4j 日志文件Linux/Mac/Windows通用存放位置设置方法

    log4j1/log4j2中category的配置以及log的输出位置(windows和linux通用的log输出位置) 一、场景和需求 假设我现在有3个独立的用project(暂时用maven关联起来,当然也可以不用maven),一个是提供公共服务的...

    Android log4j使用Demo

    例如,创建一个保存日志到设备存储的Appender,需要实现`org.apache.logging.log4j.core.Appender`接口。 6. **性能考虑** 在Android上使用log4j时,要注意性能影响。虽然它提供了更丰富的功能,但处理日志可能...

    SpringBoot Logback日志记录到数据库的实现方法

    --定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--&gt; &lt;property name="LOG_HOME" value="/home/admin" /&gt; &lt;!-- 控制台输出 --&gt; &lt;!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别...

    fs.rar_java 上传文件

    为了调试和监控,开发者可能会集成日志系统,如Log4j或Java内置的日志框架,记录文件操作的相关信息。 以上就是基于"fs.rar_java 上传文件"这个项目可能涵盖的一些关键技术和知识点。具体的实现细节和代码逻辑需要...

    追加Excel的jar包

    4. **Commons Logging**: `commons-logging-1.1.1.jar`是Apache Commons Logging库,提供了一个统一的接口来使用各种日志框架,如Log4j、java.util.logging等。在使用Apache POI或其他依赖于日志的库时,这个库可以...

    几十秒清除你电脑中的垃圾

    随着电脑使用时间的增长,大量的临时文件、日志文件、系统备份文件等会在不知不觉中积累起来,占用宝贵的磁盘空间,并可能降低电脑的运行效率。本文将详细介绍如何通过简单的方法,在短短几十秒内有效清理这些不必要...

    flume自学手册

    - **Log4jSource:** 接收Log4j输出的日志数据。 - **SyslogTcpSource:** 监听TCP端口接收syslog消息。 - **HttpSource:** 支持通过HTTP POST请求接收JSON格式的数据。 - **2.2 Channel:** 存储组件,用于...

    Java爬虫小例子,爬取小网站,突破防盗链下载图片

    - **日志记录**:通过`java.util.logging`或Log4j记录爬取过程,便于调试和监控。 5. **异常处理**: - **网络异常**:处理网络请求时可能出现的IOException,如连接超时、网络中断等。 - **解析异常**:Jsoup在...

    微软活动目录管理管理简明手册

    (2)用于活动目录数据库的最小磁盘空间为200MB,另外还要有50MB的空间用于活动目录数据库的日志文件。% N, l3 [) D1 u9 r- R" {: `( U6 K - S P; `* |# m( E* Q$ E& U2 u (3)已做好了DNS服务器的解析。1 C. \( h3 k) ...

    matlab命令中文翻译大全.pdf

    - `Diary`:保存MATLAB会话日志。 - `Cedit`:设置命令行编辑器。 - `clc`:清空命令窗口。 - `home`:将光标移动到命令窗口的左上角。 - `format`:设置输出格式。 4. **矩阵和数组操作**: - `+`:加法。 ...

    新版Android开发教程.rar

    � A ndroid 在设计初期就考虑了与现其有业务的融合,改变以往从计算机为主改成从手机使用为导向。新 生应用如:G oogle 地图及其衍生应用、 GMail 、 GTalk 等。 � GPS 卫星导航功能,手机照相, MP3 ,蓝芽等均...

Global site tag (gtag.js) - Google Analytics