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字符,就從左邊交遠銷出的字符截掉。