Spring Boot 集成log4j2日誌

1、pom文件配置java

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>cn.test.sun</groupId>
    <artifactId>spring-boot</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>spring-boot Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.6.RELEASE</version>
    </parent>
    <dependencies>
        <!--排除默認實現-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--引入log4j2-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.4</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>spring-boot</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

2、修改SpringBootS配置文件,指定log4j2.xml位置web

logging.config=classpath:log4j2.xml

3、配置log4j2.xml日誌文件spring

<?xml version="1.0" encoding="UTF-8"?>
<!--參數:status 指定log4j自己輸出日誌的級別-->
<Configuration status="ERROR">
    <properties>
        <property name="LOG_HOME">D:\\\logs</property>
        <property name="SERVER_NAME">logPro</property>
    </properties>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT" follow="true">
            <PatternLayout>
                <pattern>[%d{yyyy-MM-dd HH:mm:ss} %5p] [%t] [%C.%M]:%L - %m%n</pattern>
            </PatternLayout>
        </Console>
        <!-- 這個會打印出全部的info及如下級別的信息,天天一個文件,文件大於100MB繼續拆分-->
        <RollingFile name="business" fileName="${LOG_HOME}\${SERVER_NAME}_business.log"
                     filePattern="${LOG_HOME}\${SERVER_NAME}_business_%d{yyyy-MM-dd}_%i.log">
            <!--控制檯只輸出level及以上級別的信息(onMatch),其餘的直接拒絕(onMismatch)-->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss} %5p] [%t] [%C.%M]:%L - %m%n"/>
            <Policies>
                <!-- 基於時間完成周期性的log文件分割。參數interval:指定兩次分割的時間間隔。
                單位:以日誌的命名精度來肯定單位,好比yyyy-MM-dd-HH 單位爲小時,yyyy-MM-dd-HH-mm 單位爲分鐘
                modulate:是否對分割時間進行調製。若modulate=true,則分割時間將以0點爲邊界進行偏移計算。
                好比,modulate=true,interval=4h,若是上次分割日誌的時間爲03:00,
                下次分割時間爲04:00,以後的封存時間依次爲08:00,12:00,16:00 -->
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <!-- 基於大小完成周期性的log文件分割-->
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
            <!-- DefaultRolloverStrategy屬性如不設置,則默認爲最多同一文件夾下7個文件,這裏設置了20 -->
            <DefaultRolloverStrategy max="20"/>
        </RollingFile>
        <RollingFile name="monitor" fileName="${LOG_HOME}\${SERVER_NAME}_monitor.log"
                     filePattern="${LOG_HOME}\${SERVER_NAME}_monitor_%d{yyyy-MM-dd-HH-mm}_%i.log">
            <!--控制檯只輸出level及以上級別的信息(onMatch),其餘的直接拒絕(onMismatch)-->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss} %5p] [%t] [%C.%M]:%L - %m%n"/>
            <Policies>
                <!-- 基於時間完成周期性的log文件分割。參數interval:integer型,指定兩次分割之間的時間間隔。
                  單位:以日誌的命名精度來肯定單位,好比yyyy-MM-dd-HH 單位爲小時,yyyy-MM-dd-HH-mm 單位爲分鐘
                  modulate,boolean型,說明是否對分割時間進行調製。若modulate=true,則分割時間將以0點爲邊界進行
                  偏移計算。好比,modulate=true,interval=4hours,那麼假設上次封存日誌的時間爲03:00,
                  則下次封存日誌的時間爲04:00,以後的封存時間依次爲08:00,12:00,16:00  -->
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <!-- 基於大小完成周期性的log文件分割-->
                <SizeBasedTriggeringPolicy size="100 KB"/>
            </Policies>
            <!-- DefaultRolloverStrategy屬性如不設置,則默認爲最多同一文件夾下7個文件,這裏設置了20 -->
            <DefaultRolloverStrategy max="20"/>
        </RollingFile>
    </Appenders>
    <Loggers>
        <!--日誌不輸出到根logger中-->
        <logger name="monitor" level="info" additivity="false">
            <appender-ref ref="monitor"/>
        </logger>
        <Root level="info">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="business"/>
        </Root>
    </Loggers>
</Configuration>

附錄:日誌輸出格式。 apache

格式參數:
%p:  輸出日誌信息級別,即DEBUG,INFO,WARN,ERROR,FATAL, 
%d:  輸出日誌時間點的日期或時間,默認格式爲ISO8601,也能夠在其後指定格式。
例: %d{yyyy-MM-dd HH:mm:ss,SSS}  輸出:2017:08:10 22:10:28,921
%r:  輸出自應用啓動到輸出該log信息耗費的毫秒數 
%c:  輸出日誌信息所屬的類目,一般就是所在類的全名 
%t:  輸出產生該日誌事件的線程名 
%l:  輸出日誌事件的發生位置,至關於%C.%M(%F:%L)的組合,包括類目名、發生的線程,以及在代碼中的行數。
例: Testlog4.main(TestLog4.java:10) 
%x:  輸出和當前線程相關聯的NDC(嵌套診斷環境),尤爲用到像java servlets這樣的多客戶多線程的應用中。 
%%:  輸出一個」%」字符 
%F:  輸出日誌消息產生時所在的文件名稱 
%L:  輸出代碼中的行號 
%m:  輸出代碼中指定的消息,產生的日誌具體信息 
%n:  輸出一個回車換行符,Windows平臺爲」\r\n」,Unix平臺爲」\n」

輸出日誌信息換行能夠在%與模式字符之間加上修飾符來控制其最小寬度、最大寬度、和文本的對齊方式。如:
1)%20c:    指定輸出所屬類名稱的最小的寬度是20,若是名稱小於20的話,默認的狀況下右對齊。 
2)%-20c:   指定輸出所屬類名稱最小的寬度是20,若是名稱小於20的話,」-」號指定左對齊。 
3)%.30c:   指定輸出所屬類名稱最大的寬度是30,若是名稱大於30的話,就會將左邊多出的字符截掉,小於30的話也不會有空格。 
4)%20.30c: 若是輸出所屬類名稱小於20就補空格,而且右對齊,若是其名稱大於30字符,就從左邊交遠銷出的字符截掉。
相關文章
相關標籤/搜索