整理自网上:

一般在我们开发项目过程中,log4j日志输出路径固定到某个文件夹,这样如果我换一个环境,日志路径又需要重新修改,比较不方便,
1.log4j的FileAppender本身就有这样的机制,

如:log4j.appender.logfile.File=${WORKDIR}/logs/app.log

其中“${WORKDIR}/”是个变量,会被System Property中的“WORKDIR”的值代替。这样,我们就可以在log4j加载配置文件之前,先用System.setProperty设置好根路径。

在 没有发现这个技巧之前,为了解决这个问题,我曾自己扩展了log4j的RollingFileAppender类,其他的FileAppender同样道 理。

扩展的方法,就是用一个子类去覆盖setFile方法,这个方法在log4j读取配置文件生成appender的时候调用,传入的就是配置文件中的路 径,这样我就可以按照自己的想法在路径前面加上根路径了。

2.可以使用环境变量,(一般比较方便的配置)

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=${catalina.base}/logs/logs_tomcat.log

log4j.appender.R.MaxFileSize=10KB

3.自定义实现:
(1).在项目启动时,装入初始化类:
 1 public class Log4jInit extends HttpServlet {
 2     static Logger logger = Logger.getLogger(Log4jInit.class);
 3 
 4     public Log4jInit() {
 5     }
 6 
 7     public void init(ServletConfig config) throws ServletException {
 8         String prefix = config.getServletContext().getRealPath("/");
 9         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);
     }
 
 }
Web.xml中的配置
 <servlet>
     <servlet-name>log4j-init</servlet-name>
     <servlet-class>Log4jInit</servlet-class>
     <init-param>
       <param-name>log4j</param-name>
       <param-value>WEB-INF/classes/log4j.properties</param-value>
     </init-param>
     <load-on-startup>1</load-on-startup>
   </servlet>

log4j配置相对路径的更多相关文章

  1. log4j配置相对路径实现日志记录

    从网上简单搜索了一下,发现有三种介绍的方法.总结在这里1. 解决的办法自然是想办法用相对路径代替绝对路径,其实log4j的FileAppender本身就有这样的机制,如: log4j.appender ...

  2. log log4j配置

      log4j配置 日志路径: web方式:web.xml <context-param> <param-name>log4jConfigLocation</param- ...

  3. log4j配置日志文件log4j.appender.R.File相对路径方法

    方法一. 解决的办法自然是用相对路径代替绝对路径,其实log4j的FileAppender本身就有这样的机制,如:log4j.appender.logfile.File=${WORKDIR}/logs ...

  4. 使用log4j配置不同文件输出不同内容

    敲代码中很不注意写日志,虽然明白很重要.今天碰到记录日志,需要根据内容分别输出到不同的文件. 参考几篇文章: 感觉最详细:http://blog.csdn.net/azheng270/article/ ...

  5. web项目Log4j日志输出路径配置问题

    问题描述:一个web项目想在一个tomcat下运行多个实例(通过修改war包名称的实现),然后每个实例都将日志输出到tomcat的logs目录下实例名命名的文件夹下进行区分查看每个实例日志,要求通过尽 ...

  6. 简要log4j配置

    若排版紊乱可查看我的个人博客原文地址 1. 配置效果 下面的log4j日志配置最终能达到的效果是对于全局日志可以根据级别输入到对应级别的日志文件中,注意低级别的日志文件会同时包含高级别的日志信息,例如 ...

  7. log4j日志输出到日志文件中和控制台中 +log4j配置详解

    1.引入log4j的jar包 https://mvnrepository.com/,可以找到log4j的jar和依赖. 2.创建log4j.properties,并配置log4j #设置日志的级别 , ...

  8. 项目重构之数据源配置与优化:log4j 配置数据库连接池Druid,并实现日志存储到数据库

    作者:泥沙砖瓦浆木匠网站:http://blog.csdn.net/jeffli1993个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节. 交流QQ群:[编程之美 365234583] ...

  9. Spring的Log4J配置器Log4jWebConfigurer介绍

    1. Logj4简介 Log4j是Apache大旗下的一个子项目,它可以用来重定向应用日志文件的输出流,无论我们想将日志文件输出到控制台还是网络还是其他地方,都可以通过logj4来配置,如果我们的应用 ...

随机推荐

  1. Deque 和Queue

    概述 接口,一个线性结合,支持在集合首尾add , remove , deque 是double  ended queue 的缩写,意味双端队列,接口提供的方法有两种类型,如果失败,一种抛出异常,一种 ...

  2. Guitar Pro如何更改五线谱的符杆方向

    可能有的小伙伴不知道Guitar Pro是什么软件,我先稍微给大家介绍一下~ Guitar Pro是专为帮助所有吉他爱好者学习.绘谱.创作的多功能软件.它包含所有吉他的现有指法和音色,可以帮助我们了解 ...

  3. .net持续集成测试篇之Nunit参数化测试

    系列目录 在进行单元测试的时候,很多时候,很多时候我们都是在单元测试方法内部提供特定的值,但是这样测试往往造成样本数不足从而导致覆盖的结果不够全面,很多时候我们更想提供来自外部的,满足条件的一组值来进 ...

  4. Python pip包管理器安装第三方库超时解决方案

    一.国内镜像安装 使用方法:pip install --index 镜像网站 第三方库名 二.镜像网站 http://pypi.douban.com/simple/ 豆瓣 http://mirrors ...

  5. Promise 学习心得

    当了这么久码农到今天没事才开始去深究 Promise 这个对象 什么是 Promise, Promise 有什么用? 在写代码的时候多多少少都有遇见过地狱式的回调 代码看起来没问题就是有点乱,Prom ...

  6. todaytt

    <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.Drawe ...

  7. viewpager+fragment结合

    public class MainActivity extends AppCompatActivity implements View.OnClickListener { private ViewPa ...

  8. sql存储过程中循环批量插入

    前几天有一个需求很头痛,部门是有上下级关系的,在给部门的经理赋予角色和权限的时候,通常我们都会认为假如经理A的部门是1,那么我给了他部门1 的管理权限,那么1的下级部门101,102,103 &quo ...

  9. 全世界仅有的唯一最高LINUX版本的白菜路由,支持NAND记

    在上上篇 真千兆路由的极限之OPENWRT MAKE, 某品牌白菜价QCA9558/QCA9880/QCA8337N纯种组合OS搭建时记 里,有没有还记否之模式退一步,海阔天空 回到了远古时代的ar7 ...

  10. Rootkit与后门隐藏技术

    目录 简介 linux虚拟文件系统VFS rootkit的功能 隐藏文件 基本方法 高级方法 系统调用流程 hook sys_getdents sys_getdents的调用树 最底层的方法 隐藏进程 ...