Spring Boot使用Commons Logging作为内部日志记录的接口,为具体实现的日志类Java Util,Logging,Log4J2和 Logback提供了默认配置。在每种实现下,记录器都预先配置为使用控制台输出,并且也提供可选的文件输出。
Spring Boot默认情况下,如果使用“Starters”则使用Logback进行日志记录。
Spring Boot的默认日志输出格式如下:
2014-03-05 10:57:51.112 INFO 45469 --- [main] org.apache.catalina.core.StandardEngine:启动Servlet引擎:Apache Tomcat / 7.0.52
2014-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] oaccC [Tomcat]。[localhost]。[/]:初始化Spring嵌入式WebApplicationContext
2014-03-05 10:57:51.253 INFO 45469 --- [ost-startStop-1] osweb.context.ContextLoader:Root WebApplicationContext:初始化在1358 ms完成
2014-03-05 10:57:51.698 INFO 45469 --- [ost-startStop-1] osbceServletRegistrationBean:将servlet:'dispatcherServlet'映射到[/]
2014-03-05 10:57:51.702 INFO 45469 --- [ost-startStop-1] osbcembedded.FilterRegistrationBean:映射过滤器:'hiddenHttpMethodFilter'到:[/ *]
主要输出的项目包括:
- 日期和时间:精确到毫秒
- 日志的级别:ERROR,WARN,INFO,DEBUG,TRACE
- 进程的ID
- 分隔符 ---
- 线程名称:[方括号括起来的]
- 记录器名称:通常是类的名称
- 日志消息。
注意:Logback没有FATAL级别。它映射到ERROR级别。
如何在应用中使用Logging?
在Spring Boot 默认情况下提供日志的基本输出 ,并输出至控制台,日志级别为INFO
如果需要定义更多日志的信息,如日志的格式化,日志生成的规则等等需要自定义日志文件。
新建logback-spring.xml放至resources目录下。Spring Boot会自动加载该日志文件。
logback-spring.xml内容如下
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="log.path" value="E:/log" />
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!-- 系统日志输出 -->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/sys-info.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 按天回滚 daily -->
<fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/sys-error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 显示形成的sql、使用的参数、结果集 -->
<!--
<logger name="java.sql" level="debug" />
<logger name="org.springframework.jdbc" level="debug" />
-->
<!-- 将org.learn包下日志级别设置为info-->
<logger name="org.learn" level="info" />
<!-- 将org.springframework包下日志级别设置为ERROR-->
<logger name="org.springframework" level="ERROR" />
<!-- 将org.apache包下日志级别设置为ERROR-->
<logger name="org.apache" level="ERROR" />
<root level="info">
<appender-ref ref="console" />
</root>
<!--系统操作日志-->
<root level="info">
<appender-ref ref="file_info" />
<appender-ref ref="file_error" />
</root>
</configuration>
该文件定义了控制台输出的级别,日志文件输出的位置及界别,以及日志文件个格式和生成规则。
多环境切换时日志的配置
场景:当我们web应用有开发环境和生产环境,并且开发环境的系统是Windows,生产环境是Linux时当我们日志文件输出到硬盘时,由于系统原因路径的设置需要更改,那么我们如何可以做到自动切换到相应的路径配置上呢? 使用步骤如下:
在logback-spring.xml中需要切换的环境上增加springProfile标签
<!--不同环境指定到不同的日志路径-->
<springProfile name="dev">
<property name="log.path" value="E:/log" />
</springProfile>
<springProfile name="prd">
<property name="log.path" value="usr/local/log" />
</springProfile>