下面給下我的默認配置:
logging.file=demo.log
logging.level.root=info
logging.level.com.test.framework=DEBUG
logging.pattern.file=%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
logging.pattern.console=%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
logging.file.max-size=100M
logging.file.max-history=10
logging.config=classpath:conf/xml/logback.xml #用于配置外部logback.xml
logback.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_HOME" value="./logs" />
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/demo.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/demo.%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="errorRollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>200mb</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="async-rollingFile" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="rollingFile" />
<discardingThreshold>0</discardingThreshold>
<queueSize>512</queueSize>
</appender>
<appender name="dao-rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>./logs/dao.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>500mb</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="async-daoRollingFile" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="dao-rollingFile" />
<includeCallerData>true</includeCallerData>
</appender>
<logger name="java.sql.PreparedStatement" level="DEBUG" />
<logger name="com.apache.ibatis" level="DEBUG" />
<logger name="org.mybatis" level="DEBUG" />
<logger name="com.google.code" level="INFO" />
<logger name="java.sql.Connection" level="DEBUG" />
<logger name="java.sql.Statement" level="DEBUG" />
<logger name="java.sql.PreparedStatement" level="DEBUG" />
<logger name="org.springframework.amqp" level="INFO" />
<logger name="org.springframework" level="INFO" />
<logger name="druid.sql" level="INFO" />
<logger name="org.quartz" level="ERROR" />
<!-- 將某一個包下日志單獨打印日志 -->
<logger name="com.test.demo.dao"
level="INFO" additivity="false">
<appender-ref ref="async-daoRollingFile" />
</logger>
<root level="debug">
<appender-ref ref="console" />
<!-- <appender-ref ref="async-rollingFile" />
</root>
</configuration>
Spring Boot 能夠使用Logback, Log4J2 , java util logging 作為日志記錄工具叁丧。Spring Boot 默認使用Logback作為日志記錄工具。日志默認輸出到控制臺但也能輸出到文件中。我們通過spring-boot-starter-logging 加入Logback依賴踱卵,其實只要我們加入任意的Spring Boot starter 都會默認引入spring-boot-starter-logging贴谎,因此 我們不需要分開加入他們。
如果Logback JAR在類路徑一直可用那么Spring Boot 將一直選擇Logback 記錄日志。所以想用其他的日志工具如Log4J2痒谴,我們需要去除Logback JAR并且在類路徑中加入Log4J2的依賴稚铣。如果使用Logback記錄日志我們不用做任何事情箱叁,只要在application.properties或者application.yml中配置日志級別就可以了。console默認輸入ERROR, WARN 惕医,INFO級別的日志耕漱。可通過修改logging.level屬性來改變?nèi)罩镜妮敵黾墑e抬伺∶唬可以通過配置logging.file屬性或logging.path屬性將日志輸出到文件中。當文件到達10M的時候沛简,將新建一個文件記錄日志
logging.level. :* 作為package(包)的前綴來設(shè)置日志級別齐鲤。
logging.file :配置日志輸出的文件名,也可以配置文件名的絕對路徑椒楣。
logging.path :配置日志的路徑给郊。如果沒有配置logging.file,Spring Boot 將默認使用spring.log作為文件名。
logging.pattern.console :定義console中l(wèi)ogging的樣式捧灰。
logging.pattern.file :定義文件中日志的樣式淆九。
logging.pattern.level :定義渲染不同級別日志的格式。默認是%5p.
logging.exception-conversion-word :.定義當日志發(fā)生異常時的轉(zhuǎn)換字
PID :定義當前進程的ID
下面將討論在application.properties , application.ym ,Logback XML中配置Logback以及在Spirng Boot 應用中使用Log4J2.
1.logging.level
logging.level設(shè)置日志級別毛俏。我們可以使用TARCE , DEBUG , INFO , WARN , ERROR , FATAL , OFF 炭庙。可以使用root級別和package級別來控制日志的輸入級別煌寇。創(chuàng)建一個具有以下依賴關(guān)系的應用程序焕蹄。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
使用src\main\resources\application.properties配置日志級別
logging.level.root= WARN
logging.level.org.springframework.security= DEBUG
logging.level.org.springframework.web= ERROR
logging.level.org.hibernate= DEBUG
logging.level.org.apache.commons.dbcp2= DEBUG
使用src\main\resources\application.yml
logging:
level:
root: WARN
org:
springframework:
security: DEBUG
web: ERROR
hibernate: DEBUG
apache:
commons:
dbcp2: DEBUG
2.logging.file
Spring Boot 默認把日志輸入到console,如果我們要把日志輸入到文件中阀溶,需要配置logging.file 或者logging.path屬性性腻脏。logging.file屬性用來定義文件名。他不僅僅可以配置文件名银锻,也可以路徑+文件名永品。
logging.level.org.springframework.security= DEBUG
logging.level.org.hibernate= DEBUG
logging.file = mylogfile.log
在這種情況下mylogfile.log將在根目錄中創(chuàng)建。我們也可以為為mylogfile.log分配一個路徑击纬,如concretepage/mylogfile.log鼎姐。這種情況下我們將在相對根目錄下創(chuàng)建concretepage/mylogfile.log。我們也可以為日志文件配置絕對路徑。
application.yml中配置
logging:
level:
org:
springframework:
security: DEBUG
hibernate: DEBUG
file: mylogfile.log
3.logging.path
配置logging.path或者logging.path屬性將日志輸出到文件夾中炕桨。logging.path屬性用來定義日志文件路徑
在application.properties中配置logging.path屬性
logging.level.org.springframework.security= DEBUG
logging.level.org.hibernate= DEBUG
logging.path = concretepage/logs
將會相對根路徑下創(chuàng)建concretepage/logs/spring.log ,也可以配置絕對路徑
application.yml配置
logging:
level:
org:
springframework:
security: DEBUG
hibernate: DEBUG
path: concretepage/logs
4.logging.patter.console
通過設(shè)置logging.patter.console屬性我們能改變輸出到console的日志樣式饭尝。日志樣式包括時間,日志級別谋作,線程名芋肠,日志名以及消息。我們可以按我們的喜好改變?nèi)罩緲邮健?br> application.properties
logging.level.org.springframework.security= DEBUG
logging.level.org.hibernate= DEBUG
logging.pattern.console= %d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n
application.yml
logging:
level:
org:
springframework:
security: DEBUG
hibernate: DEBUG
pattern:
console: '%d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n'
5.logging.pattern.file
改變文件中的日志樣式我們需要設(shè)置logging.pattern.file屬性遵蚜。首先通過logging.file或logging.path屬性帖池,把日志記錄到文件中。
logging.level.org.springframework.security= DEBUG
logging.level.org.hibernate= DEBUG
logging.path = concretepage/logs
logging.pattern.file= %d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n
logging.pattern.console= %d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n
通過logging.path屬性將在根目錄下創(chuàng)建concretepage/logs并默認使用spring.log作為文件名吭净。logging.pattern.console是設(shè)置console的日志樣式
application.yml
logging:
level:
org:
springframework:
security: DEBUG
hibernate: DEBUG
path: concretepage/logs
pattern:
file: '%d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n'
console: '%d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n'
通過命令行改變?nèi)罩镜妮敵黾墑e
Sping Boot 默認輸出ERROR , WARN , INFO 級別的日志睡汹。我們可以通過命令行使能DEBUG ,TRACE級別的日志輸出,效果是跟配置文件一樣的寂殉。想象我們有一個名為my-app.jar的可執(zhí)行的JAR包我們可以在啟動應用是使能DEBUG級別日志輸出囚巴。
java -jar my-app.jar --debug
在application.properties中配置
debug=true
application.yml
debug=true
相同的方式使能TRACE級別的日志
java -jar my-app.jar --trace
application.properties
trace=true
application.yml
trace=true
在應用程序中記錄日志
創(chuàng)建一個SLF4J的例子,首先獲得org.slf4j.Logger的實例友扰。
package com.concretepage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MyApplication {
private static final Logger logger = LoggerFactory.getLogger(MyApplication.class);
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
logger.debug("--Application Started--");
}
}
在application.properties配置包com.concretepage日志記錄級別
logging.level.root= WARN
logging.level.org.springframework.web= ERROR
logging.level.com.concretepage= DEBUG
輸出
2017-03-25 19:03:54.189 DEBUG 4828 --- [ main] com.concretepage.MyApplication : Running with Spring Boot v1.5.2.RELEASE, Spring v4.3.7.RELEASE
2017-03-25 19:03:54.189 INFO 4828 --- [ main] com.concretepage.MyApplication : No active profile set, falling back to default profiles: default
2017-03-25 19:03:58.846 INFO 4828 --- [ main] com.concretepage.MyApplication : Started MyApplication in 5.209 seconds (JVM running for 5.66)
2017-03-25 19:03:58.846 DEBUG 4828 --- [ main] com.concretepage.MyApplication : --Application Started--
使用Logback XML 文件
Sping Boot中默認使用logback, 我們可以在application.properties或者application.yml中設(shè)置日志級別彤叉。如果想使用XML配置Logback,我們需要在類路徑下創(chuàng)建logback-spring.xml文件
src\main\resources\logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<logger name="org.springframework.web" level="ERROR"/>
<logger name="com.concretepage" level="DEBUG"/>
</configuration>
使用自定義日志:Log4J2
我們使用任何的starter,默認加入Logback 依賴spring-boot-starter-logging。為了使用Log4J2,我們首先要去除spring-boot-starter-logging并且引入spring-boot-starter-log4j2 依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
現(xiàn)在我們可以在類路徑下創(chuàng)建并配置log4j2-spring.xml
參考原文:http://www.concretepage.com/spring-boot/spring-boot-logging-example