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

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

log4j中日志输出文件指定相对路径的方法 1.设置在 C:/log/error.log log4j.appender.…

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就可以了~

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。

为您推荐

nodejs 整理记录

nodejs 整理记录

下载包 https://blog.csdn.net/m0_59878114/article/details/120274...
websocket测试html

websocket测试html

<!DOCTYPE html> <html> <head> <meta cha...
bigdemical两个数比较大小

bigdemical两个数比较大小

/*int result = bigdemical1.compareTo(bigdemical2) result = -...
Beetl2.7 中文文档

Beetl2.7 中文文档

Beetl目前版本是2.7.23,相对于其他java模板引擎,具有功能齐全,语法直观,性能超高,以及编写的模板容易维护等...
纯CSS实现多个便签在一行展示,拖动滚动

纯CSS实现多个便签在一行展示,拖动滚动

div <h2>请注意需要在移动端预览,PC端拖拽无效果</h2> <div class=...
返回顶部