您的位置:首页 > 其它

log4j中配置日志文件几种方式

2013-03-07 10:51 459 查看
在配置日志路径时,碰到了一个小问题,就是配置路径能有几种,自己试了一下,与大家分享。

1、绝对路径方式

使用绝对路径那就不用说什么了,直接输出到配置路径

log4j.appender.infofile.File = D:/logs/info.log

2、使用System设置好日志根路径

log4j.appender.logfile.File=${WORKDIR}/logs/info.log

其中“${WORKDIR}/”是个变量,会被System Property中的“WORKDIR”的值代替。这样,我们就可以在log4j加载配置文件之前,先用System.setProperty设置好根路径。

3、可以使用服务器环境变量 log4j的配置文件支持服务器的vm的环境变量,格式类似${catalina.home} ${catalina.base}

log4j.appender.logfile.File=${catalina.base}logs/info.log

假如使用Tomcat中间件容器,那么日志存放在Tomcat的日志下

4、通过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);

}

}

5、使用Spring提供的日志配置方法

web.xml添加如下代码:

Xml代码

<context-param>
<param-name>webAppRootKey</param-name>

<param-value>project</param-value>

</context-param>

<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>WEB-INF/classes/log4j.properties</param-value>

</context-param>

<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>

</listener>

[xml]

<context-param>
<param-name>webAppRootKey</param-name>
<param-value>project</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>WEB-INF/classes/log4j.properties</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>


webAppRootKey: 配置项目的别名,上面配置别名为project。若你部署的项目不在tomcat中的话这个可以忽略,因为tomcat没为每个应用配置不同的webappRoot属性,所以如果出现两个或以上相同的应用属性名的话就会报错了。

然后修改log4j.properties的配置,把日志文件输出的路径配置修改为:

log4j.appender.loginfo.File=${project}WEB-INF/logs/Prinfo.log

loginfo是我的appender命名。 ${project}是使用上述web.xml中的应用别名从而获取应用的绝对路径。

注:若不需要配置应用别名的话,即没配置webAppRootKey。可以直接这么写:

log4j.appender.loginfo.File=${webapp.root}WEB-INF/logs/info.log

webapp.root为默认属性。若有配置webAppRootKey的话就被覆盖。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: