1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > java log输出到文件路径_log4j中日志输出文件指定相对路径的方法

java log输出到文件路径_log4j中日志输出文件指定相对路径的方法

时间:2018-12-11 09:06:08

相关推荐

java log输出到文件路径_log4j中日志输出文件指定相对路径的方法

log4j中日志输出文件指定相对路径的方法

1.设置在C:/log/error.log

log4j.appender.E = org.apache.log4j.RollingFileAppender

log4j.appender.E.File = C:/log/error.log

log4j.appender.E.Append = true

log4j.appender.E.Threshold = ERROR

log4j.appender.E.layout = org.apache.log4j.PatternLayout

log4j.appender.E.layout.ConversionPattern =%-d{yyyy-MM-dd HH\:mm\:ss} [ %t\:%r ] - [ %p ] [%c] %m%n

第一步,首先要定义系统变量

这里说的系统变量也就是System.getProperty(..)方法可以得到的变量,比如说user.dir等与操作系统相关的变量会默认加载进来。

另外,利用启动参数-D也可以手动加入系统参数,比如我们可以指定日志路径-Dlog.path=”D:/abc/log”。当然,这样写成绝对路径又不灵活了。

其实我们可以在系统启动时在程序初始化的时候来动态选择路径,然后System.setProperty(..),那就万无一失了~

2.设置在tomcat下面(主要推荐是这种)

第二步,在log4j配置文件中使用系统变量

如何使用呢?比如我们在系统变量中定义了一个log.path,那么使用时只需要${log.path}就可以得到该属性对应的value值了

需要注意的是,若你使用的是tomcat,那么默认就可以使用${catalina.home}来得到tomcat的根目录

这种方式的原理是为log4j中配置的路径动态地添加上当前项目的根路径。

在Spring工程中一般都使用org.springframework.web.util.Log4jConfigListener这个类来加载log4j的配置文件

当然底层还是调用PropertyConfigurator.configure(url);或是DOMConfigurator.configure(url);

但是貌似这个配置文件加载之后是无法读取配置,更无法修改单个配置属性,那其实我们就需要在设置到log4j之前来修改某个值了

所以使用这种方式就必须自己定义加载log4j配置文件,思路也比较简单,比如我们用properties文件,在properties指定的输出路径我们只给定相对于项目根路径的相对路径,而项目根路径我们在程序中动态地获取。先将文件加载到Properties,之后通过组装项目根路径以及相对路径并通过set方法来改变log4j.appender.E.File的值,然后再通过PropertyConfigurator.configure(Properties properties)配置到log4j中

public class Log4jInit extends HttpServlet {

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();

FileInputStream istream = new FileInputStream(filePath);

props.load(istream);

istream.close();

String logFile = prefix + props.getProperty("log4j.appender.E.File");//设置路径

props.setProperty("log4j.appender.E.File",logFile);

PropertyConfigurator.configure(props);//装入log4j配置信息

}

}

之后在web.xml中配置好init-parameter并将该servlet的load-on-startup设置为1就可以了~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。