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

http://blog.csdn.net/fclwd/article/details/8645410

感谢原作者

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]
  1. <spanstyle="font-size:18px;"><context-param>
  2. <param-name>webAppRootKey</param-name>
  3. <param-value>project</param-value>
  4. </context-param>
  5. <context-param>
  6. <param-name>log4jConfigLocation</param-name>
  7. <param-value>WEB-INF/classes/log4j.properties</param-value>
  8. </context-param>
  9. <listener>
  10. <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  11. </listener></span>

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值