Maven项目配置log4j2.xml

log4j2相对于log4j 1.x有了脱胎换骨的变化,其官网宣称的优势有多线程下10几倍于log4j 1.x和logback的高吞吐量、可配置的审计型日志、基于插件架构的各种灵活配置等。

以下是log4j2在maven 项目中的配置步骤:

1、在pom.xml文件中引入log4j依赖

<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.10.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.10.0</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-web -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-web</artifactId>
    <version>2.10.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.lmax/disruptor -->
<dependency>
    <groupId>com.lmax</groupId>
    <artifactId>disruptor</artifactId>
    <version>3.4.1</version>
</dependency>

2、配置log4j2.xml文件放置到src/main/resources目录下

<?xml version="1.0" encoding="UTF-8"?>

<!--
    status : 这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,会看到log4j2内部各种详细输出
    monitorInterval : Log4j能够自动检测修改配置文件和重新配置本身, 设置间隔秒数。
-->
<Configuration status="WARN" monitorInterval="600">

    <Properties>
        <!-- 配置日志文件输出目录 -->
        <Property name="LOG_HOME">${sys:catalina.home}/WebAppLogs/</Property>
    </Properties>

    <Appenders>

        <!--这个输出控制台的配置-->
        <Console name="Console" target="SYSTEM_OUT">
            <!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
            <!-- <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>-->
            <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="ACCEPT"/>
            <!-- 输出日志的格式 -->
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
        </Console>

        <!-- 设置日志格式并配置日志压缩格式(service.log.年份.gz) -->
        <RollingRandomAccessFile name="service_appender"
                                 fileName="${LOG_HOME}/service.log"
                                 filePattern="${LOG_HOME}/service.log.%d{yyyy-MM-dd}.log.gz">
            <!--
                %d{yyyy-MM-dd HH:mm:ss, SSS} : 日志生产时间
                %p : 日志输出格式
                %c : logger的名称
                %m : 日志内容,即 logger.info("message")
                %n : 换行符
                %C : Java类名
                %L : 日志输出所在行数
                %M : 日志输出所在方法名
                hostName : 本地机器名
                hostAddress : 本地ip地址
             -->
            <PatternLayout>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M -- %msg%xEx%n</pattern>
            </PatternLayout>
            <Policies>
              
              <TimeBasedTriggeringPolicy/>
         		<SizeBasedTriggeringPolicy size="100 MB"/>  
        		<!--  <TimeBasedTriggeringPolicy interval="1" modulate="true" /> -->
                
            </Policies>
        </RollingRandomAccessFile>


        <!-- DEBUG日志格式 -->
        <RollingRandomAccessFile name="service_debug_appender"
                                 fileName="${LOG_HOME}/service.log"
                                 filePattern="${LOG_HOME}/service.log.%d{yyyy-MM-dd}.debug.gz">
            <PatternLayout>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M -- %msg%xEx%n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
            </Policies>
        </RollingRandomAccessFile>
    </Appenders>

    <Loggers>
        <!-- 配置日志的根节点 -->
        <root level="error">
            <appender-ref ref="Console"/>
             <appender-ref ref="service_appender"  level="error"/>
        </root>

        <!-- 第三方日志系统 -->
        <logger name="org.springframework.core" level="info"/>
        <logger name="org.springframework.beans" level="info"/>
        <logger name="org.springframework.context" level="info"/>
        <logger name="org.springframework.web" level="info"/>
        <logger name="org.jboss.netty" level="warn"/>
        <logger name="org.apache.http" level="warn"/>

        <!-- 日志实例(info),其中'service-log'继承root,但是root将日志输出控制台,而'service-log'将日志输出到文件,通过属性'additivity="false"'将'service-log'的
             的日志不再输出到控制台 -->
        <logger name="service_info_log" level="info" includeLocation="true" additivity="true">
            <appender-ref ref="service_appender"/>
        </logger>

        <!-- 日志实例(debug) -->
        <logger name="service_debug_log" level="debug" includeLocation="true" additivity="true">
            <appender-ref ref="service_debug_appender"/>
        </logger>

    </Loggers>

</Configuration>

       上面的log4j2.xml中以Configuration为根节点,有一个status属性,这个属性表示log4j2本身的日志信息打印级别。如果把status改为TRACE再执行测试代码,可以看到控制台中打印了一些log4j加载插件、组装logger等调试信息。

  日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出。对于Loggers中level的定义同样适用。

  上面配置了两种日志打印的方式,打印的等级是error。

  • Console:在命令行打印
  • RollingRandomAccessFile:打印到文件中

  Rolling的意思是当满足一定条件后,就重命名原日志文件用于备份,并从新生成一个新的日志文件。例如需求是每天生成一个日志文件,但是如果一天内的日志文件体积已经超过1G,就从新生成,两个条件满足一个即可。这在log4j 1.x原生功能中无法实现,在log4j2中就很简单了。

RollingRandomAccessFile的属性:

  • fileName  指定当前日志文件的位置和文件名称
  • filePattern  指定当发生Rolling时,文件的转移和重命名规则
  • SizeBasedTriggeringPolicy  指定当文件体积大于size指定的值时,触发Rolling
  • DefaultRolloverStrategy  指定最多保存的文件个数

  TimeBasedTriggeringPolicy  这个配置需要和filePattern结合使用,注意filePattern中配置的文件重命名规则是${log_path}/zcrTest%d{yyyy-MM-dd}.log,最小的时间粒度是dd,即分钟,TimeBasedTriggeringPolicy指定的size是1,结合起来就是每一天生成一个新文件。如果改成%d{yyyy-MM-dd HH},最小粒度为小时,则每一个小时生成一个文件。

3、配置xml文件的扫描路径

<resources>
    <resource>
        <directory>src/main/java</directory>
        <includes>
            <include>**/*.properties</include>
            <include>**/*.xml</include>
        </includes>
        <filtering>true</filtering>
    </resource>
    <!--扫描配置文件所在的目录-->            
    <resource>
        <directory>src/main/resources</directory>
        <includes>
            <include>**/*.properties</include>
            <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
   </resource>      
</resources>

4、在web.xml文件中listener

<context-param>
    <param-name>log4jConfiguration</param-name>
    <param-value>{log4j2.xml所在目录}/log4j2.xml</param-value>
</context-param>

<listener>
    <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
</listener>

<filter>
    <filter-name>log4jServletFilter</filter-name>
    <filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>log4jServletFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
    <dispatcher>ERROR</dispatcher>
</filter-mapping>

5、测试调用

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

private static Logger logger = LogManager.getLogger(APIV1Filter.class);

logger.info(..);
logger.error(..)

 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当使用'classpath:log4j2.xml'配置文件时,日志记录系统初始化失败的原因可能有以下几种情况: 1. 配置文件路径错误:请确保'log4j2.xml'文件位于正确的类路径下,即与应用程序的类文件在同一目录或子目录中。 2. 配置文件格式错误:请检查'log4j2.xml'文件的语法和结构是否正确。确保文件中的标签和配置项与日志记录系统的要求一致。 3. 缺少必要的依赖:如果应用程序使用了特定版本的log4j 2.x,需要确保相关的log4j 2.x库已正确添加到项目的依赖中。你可以通过maven资源库或手动添加jar包来解决依赖问题。 4. 日志记录系统版本不匹配:请确保你正在使用与'log4j2.xml'配置文件相对应的log4j版本。不同版本的log4j可能有不兼容的配置项或语法。 综上所述,当出现'Logging system failed to initialize using configuration from 'classpath:log4j2.xml''的错误时,你可以检查配置文件的路径、格式,以及相关的依赖和日志记录系统的版本是否正确。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Logging system failed to initialize using configuration from 'classpath:logback.xml'](https://blog.csdn.net/qq_43648299/article/details/103832227)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [logging-log4j2-log4j-2.15.0-rc2.zip maven 资源库](https://download.csdn.net/download/u010569806/72510733)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值