zoukankan      html  css  js  c++  java
  • web项目Log4j日志输出路径配置问题

    问题描述:一个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>
     
    关于在web.xml中配置log.log
    <context-param>
             <param-name>webAppRootKey</param-name>
             <param-value>amt.root</param-value>//定义别名   在log.properties配置文件中可以应用这个变量
    //等同于项目名
    </context-param>

    <context-param>
            <param-name>log4jConfigLocation</param-name>
            <param-value>classpath:conf/log4j.properties</param-value> //加载log4j
    </context-param>

        <!--定义LOG4J监听器-->
    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>

    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中相关配置。
  • 相关阅读:
    Graph 学习
    忘记 mysql 8.0 root 密码 怎么修改
    HTML字符实体(关于&nbsp;&gt;&lt;等)
    Sqlserver 中系统表sysobjects、syscolumns以及函数object_id
    SQL Server创建索引(转)
    改善SQL语句(转)
    (转)SqlServer索引及优化详解(1)
    标签点击不返回顶部和不刷新页面方法
    c#模拟js escape方法
    获取枚举描述信息
  • 原文地址:https://www.cnblogs.com/tongxinling/p/7860780.html
Copyright © 2011-2022 走看看