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]
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的话就被覆盖。
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的话就被覆盖。
相关文章推荐
- log4j中配置日志文件几种方式(转载)
- log4j中配置日志文件几种方式
- Log4j日志输出方式配置文件log4j.properties用法个人见解
- java中使用log4j日志文件,读取配置文件的方式
- 在log4j中,输出另一个日志文件的配置方式
- Log4j按级别输出日志到不同文件配置分析
- Log4j日志配置文件
- 有效Log4j按指定级别定向输出日志到指定的输出文件地址配置Threshold,log4j中如何屏蔽父logger输出源rootlogger的additivity配置,log4j向多个文件记录日志
- python之配置日志的几种方式
- log4j 日志文件保存 服务器目录+配置示例
- java读取配置文件的几种方式
- tomcat配置log4j输出日志从控制台改到指定文件
- log4j输出多个自定义日志文件,动态配置路径
- log4j日志配置文件及将日志根据不同的等级输入到不同的文件之中
- log4j日志配置文件及将日志根据不同的等级输入到不同的文件之中
- log4j中配置日志文件相对路径方法分析
- Log4j 独立输出日志文件,以及不启动服务器修改配置生效的例子
- Log4j日志的使用及配置文件(lp)
- log4j 配置 文件保存日志
- Spring MVC框架配置log4j输出日志到文件