Spring Boot 入门 - 基础篇(三)- 日志管理(Logback/Log4J2)
Spring Boot 入门 - 基础篇(3)- 日志管理(Logback/Log4J2)
Spring Boot支持JUL,Log4J2和Logback。
默认设置
-采用SLF4J + Logback
-日志只输出到控制台
-级别Level为INFO
-日志文件rotate大小为10Mb
-输出格式为:时间戳 级别 进程ID --- [线程名] 类名 日志内容
输出到文件
src/main/resources/application.properties
会在该目录下创建spring.log文件,输出内容和控制台相同。
详细配置
src/main/resources/application.properties
*** logging.file 和 logging.path不能同时设置
测试代码
src/main/java/com/rensanning/springboot/HelloController.java
启动应用后访问 http://localhost:8080/。
控制台输出内容:
文件输出内容:
外部配置
src/main/resources/
src/main/resources/logback-spring.xml
启动应用后访问 http://localhost:8080/。
控制台输出内容:
文件输出内容:
SpringBoot默认配置文件
base.xml(console-appender.xml file-appender.xml)
https://github.com/spring-projects/spring-boot/blob/master/spring-boot/src/main/resources/org/springframework/boot/logging/logback/base.xml
部分设置(引入base.xml)
src/main/resources/application.properties
src/main/resources/logback-spring.xml
启动应用后访问 http://localhost:8080/。
控制台输出内容:
文件输出内容:
使用<springProfile>
src/main/resources/application.properties
src/main/resources/logback-spring.xml
添加VM参数 -Dspring.profiles.active=dev 启动应用后访问 http://localhost:8080/。
文件没有输出,而控制台输出内容:
添加VM参数 -Dspring.profiles.active=production 启动应用后访问 http://localhost:8080/。
控制台没有输出,而文件输出内容:
使用<if><then><else>
Logback通过Janino包还支持在配置文件中条件判断。 http://janino-compiler.github.io/janino/
使用Log4J 2
pom.xml
src/main/resources/log4j2-spring.xml
启动应用后访问 http://localhost:8080/。
控制台输出内容:
Spring Boot支持JUL,Log4J2和Logback。
默认设置
-采用SLF4J + Logback
-日志只输出到控制台
-级别Level为INFO
-日志文件rotate大小为10Mb
-输出格式为:时间戳 级别 进程ID --- [线程名] 类名 日志内容
引用
2017-02-09 08:54:16.076 INFO 8296 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
输出到文件
src/main/resources/application.properties
引用
logging.path=d:
会在该目录下创建spring.log文件,输出内容和控制台相同。
详细配置
src/main/resources/application.properties
# Location of the log file. logging.file=d:\\spring-boot-demo.log # Appender pattern logging.pattern.console=%date %-5level %logger{0} - %msg%n logging.pattern.file=%date %-5level [%thread] %logger{0} [%file:%line] - %msg%n logging.pattern.level=%5p # Log levels - root logging.level.=DEBUG # Log levels - package logging.level.org.springframework.web=INFO # Log levels - class logging.level.com.rensanning.springboot.HomeController=TRACE
*** logging.file 和 logging.path不能同时设置
测试代码
src/main/java/com/rensanning/springboot/HelloController.java
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { private final Logger log = LoggerFactory.getLogger(this.getClass()); @RequestMapping("/") public String index() { // Log a simple message log.debug("debug level log"); log.info("info level log"); log.warn("warn level log"); log.error("error level log"); return "Hello world from Spring Boot!"; } }
启动应用后访问 http://localhost:8080/。
控制台输出内容:
引用
2017-02-09 09:00:13,031 DEBUG HelloController - debug level log
2017-02-09 09:00:13,031 INFO HelloController - info level log
2017-02-09 09:00:13,031 WARN HelloController - warn level log
2017-02-09 09:00:13,031 ERROR HelloController - error level log
2017-02-09 09:00:13,031 INFO HelloController - info level log
2017-02-09 09:00:13,031 WARN HelloController - warn level log
2017-02-09 09:00:13,031 ERROR HelloController - error level log
文件输出内容:
引用
2017-02-09 09:00:13,031 DEBUG [http-nio-8080-exec-1] HelloController [HelloController.java:17] - debug level log
2017-02-09 09:00:13,031 INFO [http-nio-8080-exec-1] HelloController [HelloController.java:18] - info level log
2017-02-09 09:00:13,031 WARN [http-nio-8080-exec-1] HelloController [HelloController.java:19] - warn level log
2017-02-09 09:00:13,031 ERROR [http-nio-8080-exec-1] HelloController [HelloController.java:20] - error level log
2017-02-09 09:00:13,031 INFO [http-nio-8080-exec-1] HelloController [HelloController.java:18] - info level log
2017-02-09 09:00:13,031 WARN [http-nio-8080-exec-1] HelloController [HelloController.java:19] - warn level log
2017-02-09 09:00:13,031 ERROR [http-nio-8080-exec-1] HelloController [HelloController.java:20] - error level log
外部配置
src/main/resources/
- Logback -> logback.xml 或 logback-spring.xml
- Log4j2 -> log4j2.xml 或 log4j2-spring.xml
- JUL -> logging.properties
src/main/resources/logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="30 seconds"> <property name="log.base" value="d:" /> <property name="log.level" value="DEBUG" /> <!-- Appenders --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%-5level %logger{0} - %msg%n</pattern> </encoder> </appender> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.base}/SpringSample.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.base}/SpringSample.%d{yyyyMMdd}.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>5MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <encoder> <pattern>%date %-5level [%thread] %logger{0} [%file:%line] - %msg%n</pattern> </encoder> </appender> <!-- 3rdparty Logger --> <logger name="org.springframework" level="${log.level}" /> <logger name="org.apache.commons" level="INFO" /> <logger name="org.apache.tiles" level="INFO" /> <logger name="org.apache.ibatis" level="${log.level}" /> <logger name="org.apache.shiro" level="${log.level}" /> <logger name="org.dozer" level="INFO" /> <logger name="org.scribe" level="${log.level}" /> <!-- Application Logger --> <logger name="com.rensanning.springboot" level="${log.level}" /> <!-- Root Logger --> <root level="${log.level}"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> </root> </configuration>
启动应用后访问 http://localhost:8080/。
控制台输出内容:
引用
DEBUG HelloController - debug level log
INFO HelloController - info level log
WARN HelloController - warn level log
ERROR HelloController - error level log
INFO HelloController - info level log
WARN HelloController - warn level log
ERROR HelloController - error level log
文件输出内容:
引用
2017-02-09 09:07:00,191 DEBUG [http-nio-8080-exec-1] HelloController [HelloController.java:17] - debug level log
2017-02-09 09:07:00,191 INFO [http-nio-8080-exec-1] HelloController [HelloController.java:18] - info level log
2017-02-09 09:07:00,191 WARN [http-nio-8080-exec-1] HelloController [HelloController.java:19] - warn level log
2017-02-09 09:07:00,191 ERROR [http-nio-8080-exec-1] HelloController [HelloController.java:20] - error level log
2017-02-09 09:07:00,191 INFO [http-nio-8080-exec-1] HelloController [HelloController.java:18] - info level log
2017-02-09 09:07:00,191 WARN [http-nio-8080-exec-1] HelloController [HelloController.java:19] - warn level log
2017-02-09 09:07:00,191 ERROR [http-nio-8080-exec-1] HelloController [HelloController.java:20] - error level log
SpringBoot默认配置文件
base.xml(console-appender.xml file-appender.xml)
https://github.com/spring-projects/spring-boot/blob/master/spring-boot/src/main/resources/org/springframework/boot/logging/logback/base.xml
<included> <include resource="org/springframework/boot/logging/logback/defaults.xml" /> <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/> <include resource="org/springframework/boot/logging/logback/console-appender.xml" /> <include resource="org/springframework/boot/logging/logback/file-appender.xml" /> <root level="INFO"> <appender-ref ref="CONSOLE" /> <appender-ref ref="FILE" /> </root> </included>
部分设置(引入base.xml)
src/main/resources/application.properties
引用
logging.path=d:
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="com.rensanning.springboot" level="WARN" additivity="false"> <appender-ref ref="CONSOLE"/> <appender-ref ref="FILE"/> </logger> </configuration>
启动应用后访问 http://localhost:8080/。
控制台输出内容:
引用
2017-02-09 09:13:43.723 WARN 5648 --- [nio-8080-exec-1] c.rensanning.springboot.HelloController : warn level log
2017-02-09 09:13:43.723 ERROR 5648 --- [nio-8080-exec-1] c.rensanning.springboot.HelloController : error level log
2017-02-09 09:13:43.723 ERROR 5648 --- [nio-8080-exec-1] c.rensanning.springboot.HelloController : error level log
文件输出内容:
引用
2017-02-09 09:13:43.723 WARN 5648 --- [http-nio-8080-exec-1] c.rensanning.springboot.HelloController : warn level log
2017-02-09 09:13:43.723 ERROR 5648 --- [http-nio-8080-exec-1] c.rensanning.springboot.HelloController : error level log
2017-02-09 09:13:43.723 ERROR 5648 --- [http-nio-8080-exec-1] c.rensanning.springboot.HelloController : error level log
使用<springProfile>
src/main/resources/application.properties
引用
logging.path=d:
src/main/resources/logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?> <configuration> <include resource="org/springframework/boot/logging/logback/base.xml" /> <springProfile name="dev,staging"> <logger name="com.rensanning.springboot" level="DEBUG" additivity="false"> <appender-ref ref="CONSOLE" /> </logger> </springProfile> <springProfile name="production"> <logger name="com.rensanning.springboot" level="WARN" additivity="false"> <appender-ref ref="FILE" /> </logger> </springProfile> </configuration>
添加VM参数 -Dspring.profiles.active=dev 启动应用后访问 http://localhost:8080/。
文件没有输出,而控制台输出内容:
引用
2017-02-09 09:19:01.882 DEBUG 7676 --- [nio-8080-exec-1] c.rensanning.springboot.HelloController : debug level log
2017-02-09 09:19:01.882 INFO 7676 --- [nio-8080-exec-1] c.rensanning.springboot.HelloController : info level log
2017-02-09 09:19:01.882 WARN 7676 --- [nio-8080-exec-1] c.rensanning.springboot.HelloController : warn level log
2017-02-09 09:19:01.882 ERROR 7676 --- [nio-8080-exec-1] c.rensanning.springboot.HelloController : error level log
2017-02-09 09:19:01.882 INFO 7676 --- [nio-8080-exec-1] c.rensanning.springboot.HelloController : info level log
2017-02-09 09:19:01.882 WARN 7676 --- [nio-8080-exec-1] c.rensanning.springboot.HelloController : warn level log
2017-02-09 09:19:01.882 ERROR 7676 --- [nio-8080-exec-1] c.rensanning.springboot.HelloController : error level log
添加VM参数 -Dspring.profiles.active=production 启动应用后访问 http://localhost:8080/。
控制台没有输出,而文件输出内容:
引用
2017-02-09 09:20:31.243 WARN 7436 --- [http-nio-8080-exec-1] c.rensanning.springboot.HelloController : warn level log
2017-02-09 09:20:31.243 ERROR 7436 --- [http-nio-8080-exec-1] c.rensanning.springboot.HelloController : error level log
2017-02-09 09:20:31.243 ERROR 7436 --- [http-nio-8080-exec-1] c.rensanning.springboot.HelloController : error level log
使用<if><then><else>
Logback通过Janino包还支持在配置文件中条件判断。 http://janino-compiler.github.io/janino/
<dependency> <groupId>org.codehaus.janino</groupId> <artifactId>janino</artifactId> <version>2.7.8</version> </dependency>
<?xml version="1.0" encoding="UTF-8"?> <configuration> <include resource="org/springframework/boot/logging/logback/base.xml" /> <if condition='property("spring.profiles.active").contains("dev")'> <then> <logger name="com.rensanning.springboot" level="DEBUG" additivity="false"> <appender-ref ref="CONSOLE" /> </logger> </then> <else> <logger name="com.rensanning.springboot" level="WARN" additivity="false"> <appender-ref ref="FILE" /> </logger> </else> </if> </configuration>
使用Log4J 2
pom.xml
引用
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
src/main/resources/log4j2-spring.xml
<?xml version="1.0" encoding="UTF-8"?> <Configuration monitorInterval="60"> <Properties> <Property name="log-path">d:</Property> </Properties> <Appenders> <Console name="Console-Appender" target="SYSTEM_OUT"> <PatternLayout> <pattern> [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n </pattern>> </PatternLayout> </Console> <File name="File-Appender" fileName="${log-path}/springboot_log.log" > <PatternLayout> <pattern> [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n </pattern> </PatternLayout> </File> </Appenders> <Loggers> <Logger name="com.rensanning.springboot" level="info" additivity="false"> <AppenderRef ref="Console-Appender"/> </Logger> <Root> <AppenderRef ref="File-Appender"/> <AppenderRef ref="Console-Appender"/> </Root> </Loggers> </Configuration>
启动应用后访问 http://localhost:8080/。
控制台输出内容:
引用
[INFO ] 2017-02-09 09:34:36.702 [http-nio-8080-exec-1] HelloController - info level log
[WARN ] 2017-02-09 09:34:36.702 [http-nio-8080-exec-1] HelloController - warn level log
[ERROR] 2017-02-09 09:34:36.702 [http-nio-8080-exec-1] HelloController - error level log
[WARN ] 2017-02-09 09:34:36.702 [http-nio-8080-exec-1] HelloController - warn level log
[ERROR] 2017-02-09 09:34:36.702 [http-nio-8080-exec-1] HelloController - error level log