zoukankan      html  css  js  c++  java
  • log4j2.xml日志文件设置文件路径

    笔者最近的项目里使用了spring,spring通过web.xml配置监听器,在web启动时web.root系统变量,以供其他变量使用,例如

    在属性文件里使用${web.root}以取得完整路径,项目里使用了log4j2,在设置文件路径的时候也尝试用${web.root}却始终无法

    获得属性值,创建的文件夹名字叫${web.root},显然这不符合实际工作环境需要。网上也有${sys:web.root}的说法。

    也只会创建${sys:web.root}文件夹,后来在官网上找到相关设置方法Lookups(提供了在任意位置向Log4j配置添加值的方法。

    它们是实现StrLookup接口的特殊类型的插件)。本文使用的是WebLookup类。

    网页查询

    WebLookup允许应用程序检索与ServletContext关联的变量。除了能够检索ServletContext中的各种字段之外,WebLookup还支持查找存储为属性的值或配置为初始化参数。下表列出了可以检索的各种键:

    描述
    attr.name 返回具有指定名称的ServletContext属性
    contextPath Web应用程序的上下文路径
    effectiveMajorVersion 获取由ServletContext表示的应用程序所基于的Servlet规范的主要版本。
    effectiveMinorVersion 获取由ServletContext表示的应用程序所基于的Servlet规范的次要版本。
    initParam.name
    返回具有指定名称的ServletContext初始化参数
    majorVersion 返回Servlet容器支持的主要版本的Servlet API。
    minorVersion 返回Servlet容器支持的Servlet API的次要版本。
    rootDir 返回值为getRealPath("/")的调用结果。
    serverInfo 返回运行servlet的servlet容器的名称和版本。
    servletContextName 返回在部署描述符的display-name元素中定义的Web应用程序的名称

    笔者的log4j2.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
    <!-- https://logging.apache.org/log4j/2.0/manual/lookups.html -->
     <!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
     <!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
     <configuration status="WARN" monitorInterval="30">
      <!-- <Properties>
        <Property name="webRoot">${web.root}</Property>
      </Properties> -->
         <!--先定义所有的appender-->
         <appenders>
         <!--这个输出控制台的配置-->
             <console name="Console" target="SYSTEM_OUT">
             <!--输出日志的格式-->
                 <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
             </console>
         <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用-->
         <File name="log" fileName="${web:rootDir}/WEB-INF/logs/license-test.log" append="false">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
         </File>
         <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
             <RollingFile name="RollingFileInfo" fileName="${web:rootDir}/WEB-INF/logs/license-info.log"
                          filePattern="${web:rootDir}/WEB-INF/logs/license/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log.gz">
                 <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->        
                 <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
                 <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
                 <Policies>
                     <TimeBasedTriggeringPolicy/>
                     <SizeBasedTriggeringPolicy size="5 MB"/>
                 </Policies>
             </RollingFile>
             <RollingFile name="RollingFileWarn" fileName="${web:rootDir}/WEB-INF/logs/license-warn.log"
                          filePattern="${web:rootDir}/WEB-INF/logs/license/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
                 <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
                 <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
                 <Policies>
                     <TimeBasedTriggeringPolicy/>
                     <SizeBasedTriggeringPolicy size="5 MB"/>
                 </Policies>
             <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
                 <DefaultRolloverStrategy max="20"/>
             </RollingFile>
             <RollingFile name="RollingFileError" fileName="${web:rootDir}/WEB-INF/logs/license-error.log"
                          filePattern="${web:rootDir}/WEB-INF/logs/license/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
                 <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
                 <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
                 <Policies>
                     <TimeBasedTriggeringPolicy/>
                     <SizeBasedTriggeringPolicy size="5 MB"/>
                 </Policies>
             </RollingFile>
         </appenders>
         <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
         <loggers>
             <!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
             <logger name="org.springframework" level="INFO"></logger>
             <logger name="org.mybatis" level="INFO"></logger>
             <root level="all">
                 <appender-ref ref="Console"/>
                 <appender-ref ref="RollingFileInfo"/>
                 <appender-ref ref="RollingFileWarn"/>
                 <appender-ref ref="RollingFileError"/>
             </root>
         </loggers>
     </configuration>

    如果log4j2出错,调整status="WARN"为status="TRACE"以便获得更多信息

    web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="licenseserver" version="3.0">
      <description>授权服务器</description>
      <display-name>license</display-name>
      <listener>
        <listener-class>org.springframework.web.util.WebAppRootListener</listener-class>
      </listener>
      <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
       <listener>
    <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
    </listener>
    <context-param>
    <param-name>isLog4jAutoInitializationDisabled</param-name>
    <param-value>false</param-value>
    </context-param>
      <error-page>
        <error-code>404</error-code>
        <location>/WEB-INF/404.html</location>
      </error-page>
      <error-page>
        <error-code>500</error-code>
        <location>/WEB-INF/500.html</location>
      </error-page>
      <error-page>
        <error-code>505</error-code>
        <location>/WEB-INF/505.html</location>
      </error-page>
        <context-param>
        <param-name>webAppRootKey</param-name>
        <param-value>web.root</param-value>
      </context-param>
      <context-param>
        <param-name>rootPath</param-name>
        <param-value>web.root</param-value>
      </context-param>
      <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
      </context-param>
    </web-app>

    jar文件:

    log4j-core-2.9.0.jar
    log4j-web-2.9.0.jar
    spring-context-support-4.3.10.RELEASE.jar
  • 相关阅读:
    平衡二叉树之RB树
    平衡二叉树之AVL树
    实现哈希表
    LeetCode Median of Two Sorted Arrays
    LeetCode Minimum Window Substring
    LeetCode Interleaving String
    LeetCode Regular Expression Matching
    PAT 1087 All Roads Lead to Rome
    PAT 1086 Tree Traversals Again
    LeetCode Longest Palindromic Substring
  • 原文地址:https://www.cnblogs.com/passedbylove/p/7608858.html
Copyright © 2011-2022 走看看