log4j2+slf4j

###Java日誌組件java

  • Java日誌API由三個核心組件組成web

  • Loggers:Logger負責捕捉事件並將其發送給合適的Appender。apache

  • Appenders:也被稱爲Handlers,負責將日誌事件記錄到目標位置。在將日誌事件輸出以前,Appenders使用Layouts來對事件進行格式化處理。app

  • Layouts:也被稱爲Formatters,它負責對日誌事件中的數據進行轉換和格式化。Layouts決定了數據在一條日誌記錄中的最終形式。dom

###日誌抽象層maven

  • slf4j
  • common-logging

###日誌實現測試

  • log4j
  • java.util.logging
  • logback

###採用slf4j + log4j2 做爲日誌組件url

maven 配置spa

<!--log config log4j 2 + slf4j-->
    <dependency>  
            <groupId>org.apache.logging.log4j</groupId>  
            <artifactId>log4j-web</artifactId>  
            <version>${log4j.version}</version>  
    </dependency>  
    <dependency>  
            <groupId>org.apache.logging.log4j</groupId>  
            <artifactId>log4j-slf4j-impl</artifactId>  
            <version>${log4j.version}</version>  
    </dependency>

web 配置日誌

<!-- log4j2-begin web3.0 針對web3.0的配置-->
<context-param>
    <param-name>isLog4jAutoInitializationDisabled</param-name>
    <param-value>true</param-value>
</context-param>


<!-- log4j2-begin web2.0 針對web2.0的配置-->

<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>

貼一個log4j2的配置

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="off" monitorInterval="1800">

    <properties>
        <property name="LOG_HOME">${web:rootDir}/log</property>
        <property name="FILE_NAME">mylog</property>
    </properties>

    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </Console>

        <!--文件會打印出全部信息,這個log每次運行程序會自動清空,由append屬性決定,這個也挺有用的,適合臨時測試用-->
        <File name="log" fileName="${LOG_HOME}/test.log" append="false">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
        </File>


        <!--這個會打印出全部的信息,每次大小超過size,則這size大小的日誌會自動存入按年份-月份創建的文件夾下面並進行壓縮,做爲存檔-->
        <RollingRandomAccessFile name="RollingFile"
                                 fileName="${LOG_HOME}/${FILE_NAME}.log" filePattern="${LOG_HOME}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}-%i.log.gz">
            <PatternLayout
                    pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n" />
            <Policies>
                <TimeBasedTriggeringPolicy />
                <SizeBasedTriggeringPolicy size="10 MB" />
            </Policies>
            <DefaultRolloverStrategy max="20" />
        </RollingRandomAccessFile>
    </Appenders>

    <Loggers>

        <Root level="trace">
            <AppenderRef ref="Console" />
            <AppenderRef ref="RollingFile" />
            <AppenderRef ref="log" />
        </Root>
    </Loggers>
</Configuration>
本站公眾號
   歡迎關注本站公眾號,獲取更多信息