log4j中配置日志文件几种方式(转载)

来源:互联网 发布:js object to xml 编辑:程序博客网 时间:2024/06/07 06:43

在配置日志路径时,碰到了一个小问题,就是配置路径能有几种,自己试了一下,与大家分享。

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>  

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的话就被覆盖。

原创粉丝点击