Spring Boot 入门 - 基础篇(3)- 日志管理

Spring Boot支持JUL,Log4J2和Logback。

[b]默认设置[/b]
-采用SLF4J + Logback
-日志只输出到控制台
-级别Level为INFO
-日志文件rotate大小为10Mb
-输出格式为:时间戳 级别 进程ID --- [线程名] 类名 日志内容
[quote]2017-02-09 08:54:16.076 INFO 8296 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)[/quote]

[b]输出到文件[/b]
src/main/resources/application.properties
[quote]logging.path=d:[/quote]
会在该目录下创建spring.log文件,输出内容和控制台相同。

[b]详细配置[/b]
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不能同时设置

[b]测试代码[/b]
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/。

控制台输出内容:
[quote]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[/quote]
文件输出内容:
[quote]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[/quote]

[b]外部配置[/b]
src/main/resources/
[list]
[*]Logback -> logback.xml 或 logback-spring.xml
[*]Log4j2 -> log4j2.xml 或 log4j2-spring.xml
[*]JUL -> logging.properties
[/list]

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

控制台输出内容:
[quote]DEBUG HelloController - debug level log
INFO HelloController - info level log
WARN HelloController - warn level log
ERROR HelloController - error level log[/quote]
文件输出内容:
[quote]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[/quote]

[b]SpringBoot默认配置文件[/b]
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>


[b]部分设置(引入base.xml)[/b]
src/main/resources/application.properties
[quote]logging.path=d:[/quote]
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/。

控制台输出内容:
[quote]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[/quote]
文件输出内容:
[quote]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[/quote]

[b]使用<springProfile>[/b]
src/main/resources/application.properties
[quote]logging.path=d:[/quote]
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参数 [color=blue]-Dspring.profiles.active=dev[/color] 启动应用后访问 http://localhost:8080/。

文件没有输出,而控制台输出内容:
[quote]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[/quote]

添加VM参数 [color=blue]-Dspring.profiles.active=production[/color] 启动应用后访问 http://localhost:8080/。

控制台没有输出,而文件输出内容:
[quote]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[/quote]

[b]使用<if><then><else>[/b]
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>


[b]使用Log4J 2[/b]

pom.xml
[quote]<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> [/quote]

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

控制台输出内容:
[quote][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[/quote]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值