从网上简单搜索了一下,发现有三种介绍的方法。总结在这里
法一、 解决的办法自然是想办法用相对路径代替绝对路径,其实log4j的FileAppender本身就有这样的机制,如:log4j.appender.logfile.File=${WORKDIR}/logs/app.log
其中“${WORKDIR}/”是个变量,会被System Property中的“WORKDIR”的值代替。这样,我们就可以在log4j加载配置文件之前,先用System.setProperty("WORKDIR", WORKDIR);设置好根路径,此操作可通过一初始的servlet进行,具体方法略。
在没有发现这个技巧之前,为了解决这个问题,我曾自己扩展了log4j的RollingFileAppender类,其他的FileAppender同样道理。扩展的方法,就是用一个子类去覆盖setFile方法,这个方法在log4j读取配置文件生成appender的时候调用,传入的就是配置文件中的路径,这样我就可以按照自己的想法在路径前面加上根路径了。
法二、可以使用服务器环境变量
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参数中
法三、通过servlet初始化init()方法中加载file属性实现相对路径
具体实现:做一个servlet,在系统加载的时候,就把properties的文件读到一个properties文件中.那个file的属性值(我使用的是相对目录)改掉(前面加上系统的根目录),让后把这个properties对象设置到propertyConfig中去,这样就初始化了log的设置.在后面的使用中就用不着再配置了
一般在我们开发项目过程中,log4j日志输出路径固定到某个文件夹,这样如果我换一个环境,日志路径又需要重新修改,比较不方便,目前我采用了动态改变日志路径方法来实现相对路径保存日志文件
(1).在项目启动时,装入初始化类:
public class Log4jInit extends HttpServlet {
static Logger logger = Logger.getLogger(Log4jInit.class);
public Log4jInit() {
}
public void init(ServletConfig config) throws ServletException {
String prefix = config.getServletContext().getRealPath("/");
String file = config.getInitParameter("log4j");
String filePath = prefix + file;
Properties props = new Properties();
try {
FileInputStream istream = new FileInputStream(filePath);
props.load(istream);
istream.close();
//toPrint(props.getProperty("log4j.appender.file.File"));
String logFile = prefix + props.getProperty("log4j.appender.file.File");//设置路径
props.setProperty("log4j.appender.file.File",logFile);
PropertyConfigurator.configure(props);//装入log4j配置信息
} catch (IOException e) {
toPrint("Could not read configuration file [" + filePath + "].");
toPrint("Ignoring configuration file [" + filePath + "].");
return;
}
}
public static void toPrint(String content) {
System.out.println(content);
}
}
实际上log4j的配置文件log4j.properties如为默认名,可放置在JVM能读到的classpath里的任意地方,一般是放在WEB-INF/classes目录下。当log4j的配置文件不再是默认名,则需要另外加载并给出参数,如上“ropertyConfigurator.configure(props);//装入log4j配置信息”
(2).Web.xml中的配置
<servlet>
<servlet-name>log4j-init</servlet-name>
<servlet-class>Log4jInit</servlet-class>
<init-param>
<param-name>log4j</param-name>
<param-value>WEB-INF/classes/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
注意:上面的load-on-startup设为0,以便在Web容器启动时即装入该Servlet。log4j.properties文件放在根的properties子目录中,也可以把它放在其它目录中。应该把.properties文件集中存放,这样方便管理。
(3).log4j.properties中即可配置log4j.appender.file.File为当前应用的相对路径。
相关推荐
### Log4j中配置日志文件相对路径方法详解 #### 概述 在软件开发过程中,日志记录是一项重要的功能,它有助于开发者调试程序、监控应用程序的运行状态以及追踪问题。`Log4j`作为一款优秀的日志管理工具,被广泛应用...
Log4j 是一个广泛使用的Java日志记录框架,它允许开发者灵活地控制日志信息的输出。在SSH(Struts、Spring、Hibernate)等Java Web框架中,配置Log4j以使用相对路径是非常常见的需求,这有助于在不同环境下保持日志...
### 完全相对路径的log4j配置 #### 背景与意义 Log4j 是一个基于 Java 的日志框架,广泛应用于企业级应用的日志记录。它提供了灵活的日志记录机制,允许开发者根据需求调整日志级别、格式以及输出目的地等。本文将...
本文主要讨论了在Log4j配置中如何处理相对路径的问题,以适应不同环境下的日志文件存储需求。 一、使用系统属性设置路径 在Log4j的配置文件(通常是`log4j.properties`)中,可以使用`${}`语法引用系统属性。例如...
Log4j是一款广泛使用的日志...通过这个简单的Log4j范例,我们可以理解如何配置和使用Log4j进行日志记录,并了解相对路径在设置日志文件时的应用。这有助于我们在开发和维护Java应用程序时更好地管理和分析日志信息。
log4j.appender.FILE.File=${catalina.home}/logs/myApp.log # 这里使用相对路径 log4j.appender.FILE.ImmediateFlush=true log4j.appender.FILE.Threshold=DEBUG log4j.appender.FILE.Append=true log4j.appender....
LOG4J 是一个广泛使用的日志记录框架,它提供了灵活且强大的配置机制,能够满足各种日志记录需求。在本文中,我们将深入探讨LOG4J配置的各种方面,帮助你更好地理解和应用LOG4J。 1. **日志级别设置** 日志级别是...
Log4j是Apache的一个开源项目,用于实现日志记录功能。它提供了一种强大的机制来控制日志的生成,使得日志信息可以被输出到不同的目的地,如控制台、文件等,并且可以根据需求设置不同的日志级别(例如DEBUG、INFO、...
通过XML配置,可以实现更复杂的配置逻辑,如多级日志记录等。 ```xml <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> ...
这里通过`getInitParameter`获取Web应用中的初始化参数,通常是log4j配置文件的路径,然后调用`PropertyConfigurator.configure()`方法加载配置。 #### 在IDE中使用Log4j 对于在IDE中开发的应用,可以直接在代码中...
// 加载log4j配置 PropertyConfigurator.configure("/WEB-INF/classes/log4j.properties"); // 输出一条日志信息 logger.info("Servlet初始化完成"); } // 其他方法... } ``` 通过这种方式,你可以轻松地...
Log4j是Apache组织提供的一款开源的日志记录框架,广泛应用于Java应用程序中。它的核心功能是为开发者提供一种灵活、高效的方式来记录应用程序运行过程中的各种信息,如错误、警告、调试信息等,有助于在开发和维护...
这是一个默认的Log4j配置文件,用于指定日志记录的行为。它使用键值对的形式定义了日志输出的级别、目的地、格式等。例如,你可以设置所有的日志信息输出到控制台,或者写入文件,甚至通过网络发送到远程服务器。...
在Java开发中,日志系统是不可或缺的一部分,Log4j作为一款广泛使用的日志记录框架,为开发者提供了强大的日志处理能力。本文将详细探讨Log4j中涉及的“绝对路径”概念及其在实际应用中的重要性。 一、Log4j简介 ...
由于Log4Qt的文档相对较少,理解其工作原理和用法往往需要参考Log4J的资料。本文将深入探讨Log4Qt的核心概念、配置、使用方法以及实际应用,以帮助开发者更好地利用这一工具进行Qt项目的日志管理。 一、Log4Qt核心...
Log4j是一款广泛使用的日志记录框架,它允许开发者对应用程序的日志输出进行灵活的配置,从而满足不同的日志需求。在本文中,我们将详细探讨如何在项目中配置Log4j,以及Log4j配置文件的主要元素。 首先,我们需要...
除了`log4j`,JDK本身也提供了日志记录包`java.util.logging`,尽管功能相对简单,但对于日志输出需求不复杂的场景来说,可能是一个更轻量级的选择。 - **初始化与配置**:使用`LogManager`类实例化记录器,并通过...
SLF4J的核心在于其API,它定义了一系列的日志记录方法,如`info()`, `debug()`, `error()`, `warn()`等,这些方法在编译时不会实际执行,只有在运行时与具体的日志实现结合后才会产生效果。这使得SLF4J具有很高的...
例如,以下是一个简单的log4j配置示例: ```xml <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="console" class="org.apache.log4j.ConsoleAppender"> ...
- Tomcat本身不包含默认的log4j配置,因此在Tomcat上使用log4j相对简单直接。 - 开发者需要自行创建log4j配置文件(log4j.properties或log4j.xml),并根据项目的需要进行配置。 - **JBoss环境下log4j配置**: - ...