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

实现分析:一般实现上面需求,需要在修改完war包名称之外要再做下面配置:
1、修改每个实例名下web.xml中参数webAppRootKey为不同值。同一个tomcat下运行多个web应用时,该值相同的话,运行时会抛异常。
         <context-param>
<param-name>webAppRootKey</param-name>
<param-value>webApp.root</param-value>
</context-param>
2、log4j配置文件日志输出路径修改
     log4j配置文件中路径配置一般有三种方法:
(1)绝对路径法:直接配置为系统觉得路径;
(2)相对路径法:
            log4j.appender.logfile.File=../logs/app.log,将日志记录到tomcat下的logs文件夹;
            log4j.appender.logfile.File=logs/app.log,将日志记录到tomcat的bin目录下的logs文件夹;
(3)使用环境变量相对路径法:程序会优先找jvm环境变量,然后再找系统环境变量,来查找配置文件中的变量。
        log4j.appender.logfile.File=${user.dir}/logs/app.log,使用tomcat容器时${user.dir}对应tomcat的bin目录;
        log4j.appender.logfile.File=${user.home}/logs/app.log,${user.home}对应操作系统当前用户目录;
        log4j.appender.logfile.File=${webApp.root}/logs/app.log,${webApp.root}对应当前应用根目录;

暂时没找到不修改log4j配置而实现上面需求的方法。在log4j配置文件中可以获取环境变量来配置,但变量里没有当前应用的名称(不能直接通过webApp.root,因为它在不同的实例名称不一样),尝试在web.xml中增加listener,获取应用名称,然后调用System.setProperty("contextPath", sce.getServletContext().getContextPath());将上下文设置到系统变量中在log4j应用,但多实例运行时每个实例都会改变该属性值。
结论,该问题的解决方法
1、手动修改配置,修改war名称后手动修改web.xml和log4j配置文件,实现上述需求。
2、通过其它程序来进行批量修改,若bat或maven等在修改war包名称时,自动修改掉web.xml和log4j中相关配置。

web项目Log4j日志输出路径配置问题的更多相关文章

  1. 项目log4j日志管理详解

    项目log4j日志管理详解 log4j日志系统在项目中重要性在这里就不再累述,我们在平时使用时如果没有特定要求,只需在log4j.properties文件中顶入输出级别就行了.如果要自定义输出文件,对 ...

  2. java web项目中 获取resource路径下的文件路径

    public GetResource{ String path = GetResource.class.getClassLoader().getResource("xx/xx.txt&quo ...

  3. (转)关于java和web项目中的相对路径问题

    原文:http://blog.csdn.net/yethyeth/article/details/1623283 关于java和web项目中的相对路径问题 分类: java 2007-05-23 22 ...

  4. log4j日志输出级别变更

    1.   现阶段log4j日志输出配置 示例:基础服务日志配置 #DEBUG < INFO < WARN < ERROR < FATAL\u65E5\u5FD7\u7684\u ...

  5. docker tomcat 已主机名为日志输出路径

    目的:所有的日志输出到共享存储目录中 方法:将 tomcat 的日志放置到 /data/logs/主机名/  下, 1. 修改tomcat/conf下的logging.properties [root ...

  6. log4j日志相对路径,Tomcat(第三方和Springboot内置)参数catalina.home和catalina.base的设置

    关于Log4j日志相对路径的配置请看:log4j 产生的日志位置设置 和 catalina.home.catalina.base . 由于我们在Log4j的配置中引入了系统属性${catalina.b ...

  7. 【转】Java Web 项目获取运行时路径 classpath

    Java Web 项目获取运行时路径 classpath 假设资源文件放在maven工程的 src/main/resources 资源文件夹下,源码文件放在 src/main/java/下, 那么ja ...

  8. Hadoop案例(五)过滤日志及自定义日志输出路径(自定义OutputFormat)

    过滤日志及自定义日志输出路径(自定义OutputFormat) 1.需求分析 过滤输入的log日志中是否包含xyg (1)包含xyg的网站输出到e:/xyg.log (2)不包含xyg的网站输出到e: ...

  9. log4j日志输出到web项目指定文件夹

    感谢 eric2500 的这篇文章:http://www.cxyclub.cn/n/27860/ 摘要:尝试将log4j的文件日志输出到web工程制定目录,遇到了很多问题,最终在eric2500的指导 ...

随机推荐

  1. 【Android自学之旅】 目录

    [Android自学之旅] 目录 [Android自学之旅] Android开发环境的搭建

  2. 【系统Configmachine.config与自己的应用程序的App.config/Web.Config配置节点重复】解决方法

    自己的应用程序的App.config或Web.Config文件中与系统的C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Configmachine.co ...

  3. uva 10313

    递推   参考了别人的解法 dp[i][j] 表示价值为i用j个硬币可以有多少种方法 dp[j][k] += dp[j-i][k-1] 意思是多加一枚价值为i的硬币,加上价值为j-i用k-1个硬币的总 ...

  4. sql中临时表的创建和使用【本文转自多人博客】

    本模块原网址:http://www.cnblogs.com/jeffwongishandsome/archive/2009/08/05/1526466.html 原作者:Jeff Wong 1.创建方 ...

  5. VisualSvn Server介绍

    1 .VisualSvn Server  VisualSvn Server是免费的,而VisualSvn是收费的.VisualSvn是Svn的客户端,和Visual Studio集成在一起,但是不免费 ...

  6. POJ 3280 Cheapest Palindrome(DP)

    题目链接 题意 :给你一个字符串,让你删除或添加某些字母让这个字符串变成回文串,删除或添加某个字母要付出相应的代价,问你变成回文所需要的最小的代价是多少. 思路 :DP[i][j]代表的是 i 到 j ...

  7. Java注解全面解析

    1.基本语法 注解定义看起来很像接口的定义.事实上,与其他任何接口一样,注解也将会编译成class文件. @Target(ElementType.Method) @Retention(Retentio ...

  8. lintcode :数组剔除元素后的乘积

    题目: 数组剔除元素后的乘积 给定一个整数数组A. 定义B[i] = A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1], 计算B的时候请不要使用除法. 样例 给出 ...

  9. Git教程之管理修改(6)

    Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件.你会问,什么是修改?比如你新增了一行,这就是一个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了 ...

  10. 计算机技能get(windows系统)

    1.快速打开程序,比如计算器,注册表,先按win键(不用再按win+r啦),输入程序名字,如calc,regedit等,直接打开. 2.自动左右分屏,win+上下左右方向键,win+↑ 最大化,win ...