`

log4j(二):动态配置日志输出路径

阅读更多

上一篇有提到:log4j.appender.R.File = /logs/my.log,日志文件直接输出在盘符根目录下的logs文件夹下,而不是常用的项目根目录的logs目录下,这篇说说让其输出到项目的根目录下。

一、没有spring帮助管理的情况下,如前一篇的例子:简单的servlet作为容器的。

第一种方法:

log4j.properties的文件输出配置如下:log4j.appender.R.File = /logs/my.log

1、修改web.xml,将log4j作为init-param添加到servlet配置中:

<servlet>
  <servlet-name>TestLog4jServlet</servlet-name>
  <servlet-class>com.wjl.servlet.TestLog4jServlet</servlet-class>
  <init-param>  
  	<param-name>log4j</param-name>  
  	<param-value>/WEB-INF/classes/log4j.properties</param-value>  
  </init-param>  
  <load-on-startup>0</load-on-startup>
</servlet>

 2、修改TestLog4jServlet的init方法:

public void init(ServletConfig config) throws ServletException {
	String prifix = config.getServletContext().getRealPath("/"); 
	//getInitParameter("log4j"):web.xml中init-param的param-name,两者必须一致
	String file = config.getInitParameter("log4j"); 
	if(file != null){ 
		Properties prop = new Properties(); 
		try{ 
			prop.load(new FileInputStream(prifix+file)); 
			//log4j.appender.R.File:log4j.properties中文件输出位置的配置,必须与配置文件中的一致
			prop.setProperty("log4j.appender.R.File", 
			prifix + prop.getProperty("log4j.appender.R.File")); 
			PropertyConfigurator.configure(prop); 
		}catch(IOException e){ 
			e.printStackTrace(); 
		} 
	} 
}

 

第二种方法(使用系统变量的方法):

log4j.properties的文件输出配置如下:log4j.appender.R.File = ${webRoot}/logs/my.log

1、修改web.xml文件,内容与方法一种的相同。

2、修改TestLog4jServlet的init方法:

public void init(ServletConfig config) throws ServletException {
	String root = config.getServletContext().getRealPath("/");
	String log4jLocation = config.getInitParameter("log4j");
	System.setProperty("webRoot", root);
	if (log4jLocation!=null) {
		PropertyConfigurator.configure(root + log4jLocation);
	}
}

第三种方法:使用服务器环境变量
log4j的配置文件支持服务器的vm的环境变量,格式类似${catalina.home}
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=${catalina.home}/logs/logs_tomcat.log
log4j.appender.R.MaxFileSize=10KB
其中的${catalina.home}并非windows系统的环境变量,这个环境变量就不需要在Windows系统的环境变量中设置。之所以这样,你可以看看tomcat\bin\catalina.bat(startup,shutdown都是调用这个)里面自带有-Dcatalina.home= "%CATALINA_HOME%" 。继承这个思想,所以你也可以自己设定一个参数-Dmylog.home="D:/abc/log"到对应的服务器java启动的vm参数中。

该方法参考自:http://www.linuxidc.com/Linux/2014-09/106571.htm

没看懂什么意思,所以没有实验

 

二、有spring帮助管理的:

log4j.properties的文件输出配置如下:log4j.appender.R.File = ${webRoot_root}/logs/my.log

在web.xml中初始化log4j:

<context-param>
	<description>日志文件的路径 </description>
	<param-name>log4jConfigLocation</param-name>
	<param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>
<context-param> 
	<description>log4jRefreshInterval为6000表示 开一条watchdog线程每6秒扫描一下配置文件的变化。 </description>
	<param-name>log4jRefreshInterval</param-name> 
	<param-value>600000</param-value> 
</context-param>
<context-param>
	<description>设置日志文件中,取系统根目录的key</description>
	<param-name>webAppRootKey</param-name>
	<param-value>webRoot_root</param-value>
</context-param>
<listener>
	<display-name>日志文件的侦听器</display-name>
	<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
写道
spring提供了org.springframework.web.util.Log4jConfigListener监听器来初始化一些必要的log4j信息,比如它使用了System.setProperty(key, root); 没错key=webapp.root,而root就是当前项目的真实路径(得到项目的真实路径也很简单ServletContext.getRealPath("/")),这样我们就可以使用${webapp.root}来获取项目的真实路径。需要注意的是:该listener需要放在spring的Listener之前。

 

分享到:
评论

相关推荐

    log4j中配置日志文件相对路径方法(PDF)

    ### Log4j中配置日志文件相对路径方法详解 #### 概述 在软件开发过程中,日志记录是一项重要的功能,它有助于开发者调试程序、监控应用程序的运行状态以及追踪问题。`Log4j`作为一款优秀的日志管理工具,被广泛应用...

    tomcat下的log4j日志配置

    在使用 Apache Tomcat 作为服务器时,合理配置日志框架(如 Log4j)能够极大地提高开发效率和系统的可维护性。本文将详细介绍两种常见的 Log4j 配置方式:Tomcat 级别的统一日志管理和每个 web 应用分别配置 Log4j,...

    log4j 配置日志文件,把日志信息输出到项目的某个文件夹下

    为了使配置生效,我们需要在`web.xml`中添加如下配置,让Spring容器加载log4j配置: ```xml &lt;param-name&gt;log4jConfigLocation &lt;param-value&gt;/WEB-INF/classes/log4j.properties&lt;/param-value&gt; &lt;!-- 指定log4j...

    log4j删除前N天日志

    # 设置日志输出路径 log4j.appender.DailyRollingFile.File=/path/to/your/logfile.log # 指定日期格式,例如每天零点滚动 log4j.appender.DailyRollingFile.DatePattern='.'yyyy-MM-dd # 设置最大备份文件数量,...

    springboot log4j2 多线程 动态日志文件名 动态日志路径 RollingFile

    Springboot 多线程应用源代码,根据线程输出到不同的日志文件, 子线程可以输出日志到父线程日志文件。 动态日志文件路径,文件名 动态输出多个日志文件 适用于复杂日志输出的用例 日志文件为RollingFile

    Log4j日志配置说明,Log4j日志配置说明

    ### Log4j日志配置详解 #### 一、概述 Log4j 是一个基于 Java 的开源日志记录框架,由 Apache 软件基金会维护。它允许开发人员根据等级记录日志信息,使得用户能够控制日志信息的记录级别及去向。本文将通过一份...

    log4j日志报错解决办法

    3. 应用程序可能加载了其他地方的Log4j配置,例如系统级的Log4j配置。 总的来说,处理Log4j的初始化警告,关键在于正确配置和引入Log4j依赖,以及在需要使用日志的地方正确初始化logger。确保配置文件可用且路径...

    log4j的详细配置,log4j.xml和log4j.properties,日志输出到文件,邮件,数据库,控制台等

    - **配置示例**:例如,`log4j.rootLogger=DEBUG, FILE`表示根日志器的级别设为DEBUG,并将日志输出到名为FILE的appender。 - **Appender配置**:在properties文件中,每个appender都有自己的配置,如`log4j....

    Tomcat使用Log4j输出catalina.out日志

    4. 定义日志输出格式:通过配置log4j.appender.CATALINA.layout为org.apache.log4j.PatternLayout,可以定义日志的格式。例如,可以设置为%d{yyyy-MM-ddHH:mm:ss.SSS}%p[%t]%c|%m%n来让日志格式和Log4j保持一致。 5...

    log4j.properties配置文件

    `log4j.properties`是Apache Log4j框架中用于配置日志记录行为的核心文件之一。通过这个文件,开发者可以定义日志消息的输出方式(例如控制台或文件)、日志级别(如DEBUG、INFO等)以及日志格式等内容。正确配置`...

    log4j-1.2.17.jar及配置文件

    《log4j-1.2.17.jar及其配置文件详解》 在IT行业中,日志记录是一项至关重要的任务,它能帮助开发者追踪程序运行状况、定位错误和调试问题。Log4j,作为Apache软件基金会的一个开源项目,是Java平台上广泛使用的...

    spring日志配置为log4j

    本篇将详细介绍如何在Spring项目中配置日志系统为Log4j。 首先,我们要明白Log4j是一个功能强大的日志框架,它提供了丰富的日志级别(如DEBUG、INFO、WARN、ERROR和FATAL)以及灵活的日志输出配置。Log4j的配置主要...

    log4j 动态配置

    3. **日志输出路径** `log4j.properties`文件中定义了日志输出的具体路径和格式。例如: ``` log4j.appender.R.File=../log/log.txt ``` 这条配置表示日志将被输出到当前目录的上级目录下的`log`文件夹中的`...

    Log4j 把不同包的日志打印到不同位置

    这篇博客"Log4j 把不同包的日志打印到不同位置"可能详细解释了如何利用Log4j配置来实现特定包的日志定向输出,以便于管理和分析来自不同模块的日志信息。 在Java应用中,我们常常会遇到多个模块或者不同包的类同时...

    mybatis,log4j打印日志到后台和文件

    总结,通过以上步骤,你已成功配置了 MyBatis 使用 Log4j 来记录日志,同时将日志输出到后台控制台和文件,这有助于在开发和调试过程中追踪问题,提高代码的可维护性。记得根据实际需求调整日志级别和输出格式,以...

    Log4j 相对路径配置

    2. `&lt;param-name&gt;log4jConfigLocation&lt;/param-name&gt;` 指定了Log4j配置文件的路径,这里是`WEB-INF/config/log4j.properties`。这个配置告诉Web应用在哪里寻找Log4j的配置信息。 3. `&lt;param-name&gt;log4...

    配置好log4j的eclipse简单工程,每天输出到一个日志文件中,该文件名为:“XXX_年月日时分.log”的形式

    3. **Log4j配置文件**: 关键在于`log4j.properties`或`log4j.xml`配置文件,此工程中可能包含其中一个。配置文件定义了日志记录的策略,如日志级别、输出目的地、格式化样式等。例如,以下配置创建了一个每日滚动...

    log4j 写多个日志文件,按照日期每天都记

    它是`log4j`的配置中心,通过这个文件我们可以定制日志输出的级别、格式、目标位置等。在这个场景下,我们关注的重点是如何设置多个日志文件并按日期切换。 1. **配置多个Appender**:`log4j`允许定义多个Appender...

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

    本教程将通过一个小例子,详细讲解如何使用Log4j配置输出多个自定义路径的日志文件。 首先,我们要理解Log4j的基本架构。Log4j主要包括三个核心组件:配置器(Configurator)、日志器(Logger)和布局器(Layout)...

Global site tag (gtag.js) - Google Analytics