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 添加
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>WEB-INF/log4j.properties</param-value>
</context-param>
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>60000</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
分享到:
相关推荐
这个“log4j简单范例 日志文件是相对路径的”示例将展示如何配置Log4j来记录日志,并将日志文件保存在程序运行时的相对路径下。 首先,Log4j的核心组件包括Logger(日志器)、Appender(输出目的地)和Layout(格式...
在SSH(Struts、Spring、Hibernate)等Java Web框架中,配置Log4j以使用相对路径是非常常见的需求,这有助于在不同环境下保持日志文件的一致性。以下是关于Log4j相对路径配置的详细说明: 首先,在`Web.xml`文件中...
在Java应用中使用Log4j进行日志记录的第一步,是创建并配置log4j的属性文件(log4j.properties)。这个文件定义了日志的级别、输出目的地以及日志的格式。以下是一个典型的log4j配置示例: ```properties # 设置根...
log4j1/log4j2中category的配置以及log的输出位置(windows和linux通用的log输出位置) 一、场景和需求 假设我现在有3个独立的用project(暂时用maven关联起来,当然也可以不用maven),一个是提供公共服务的...
例如,创建一个保存日志到设备存储的Appender,需要实现`org.apache.logging.log4j.core.Appender`接口。 6. **性能考虑** 在Android上使用log4j时,要注意性能影响。虽然它提供了更丰富的功能,但处理日志可能...
--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--> <property name="LOG_HOME" value="/home/admin" /> <!-- 控制台输出 --> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别...
为了调试和监控,开发者可能会集成日志系统,如Log4j或Java内置的日志框架,记录文件操作的相关信息。 以上就是基于"fs.rar_java 上传文件"这个项目可能涵盖的一些关键技术和知识点。具体的实现细节和代码逻辑需要...
4. **Commons Logging**: `commons-logging-1.1.1.jar`是Apache Commons Logging库,提供了一个统一的接口来使用各种日志框架,如Log4j、java.util.logging等。在使用Apache POI或其他依赖于日志的库时,这个库可以...
随着电脑使用时间的增长,大量的临时文件、日志文件、系统备份文件等会在不知不觉中积累起来,占用宝贵的磁盘空间,并可能降低电脑的运行效率。本文将详细介绍如何通过简单的方法,在短短几十秒内有效清理这些不必要...
- **Log4jSource:** 接收Log4j输出的日志数据。 - **SyslogTcpSource:** 监听TCP端口接收syslog消息。 - **HttpSource:** 支持通过HTTP POST请求接收JSON格式的数据。 - **2.2 Channel:** 存储组件,用于...
- **日志记录**:通过`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) ...
- `Diary`:保存MATLAB会话日志。 - `Cedit`:设置命令行编辑器。 - `clc`:清空命令窗口。 - `home`:将光标移动到命令窗口的左上角。 - `format`:设置输出格式。 4. **矩阵和数组操作**: - `+`:加法。 ...
谷歌早在 2002 年就进入了移动领域,可是由于目前的手机操作系统企业和手机企业相对封闭,提高了 行业的进入门槛,移动互联网的发展远没有拥有统一标准的传统互联网发展迅速,此次推出的开源手机操 作 系统平台就是...