知识追寻者springboot系列之logback,觉得文章不错,点赞加关注谢谢;关注公众号知识追寻者获取更多精彩原创内容;
logback是一个成熟的log4j 工程,由 Ceki Gülcü 所创造,也是 log4j 日志框架的创建者;
springboot		默认使用的日志框架是
logback,其由三个组件组成	
logback-spring.xml 文件放在classpath (resource目录)下 即可自动加载
<configuration debug="true"> 
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
    <!-- encoders are  by default assigned the type
         ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>
  <root level="debug">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>
复制代码
	日志格式说明
有效的日志级别如下
| level of request p | ||||||
|---|---|---|---|---|---|---|
| TRACE | DEBUG | INFO | WARN | ERROR | OFF | |
| TRACE | YES | NO | NO | NO | NO | NO | 
| DEBUG | YES | YES | NO | NO | NO | NO | 
| INFO | YES | YES | YES | NO | NO | NO | 
| WARN | YES | YES | YES | YES | NO | NO | 
| ERROR | YES | YES | YES | YES | YES | NO | 
<configuration debug="true"> ... </configuration> 复制代码
<configuration scan="true"> ... </configuration> 复制代码
30 seconds
,			30 minutes
,			3 hours
		<configuration scan="true" scanPeriod="30 seconds" > ... </configuration> 复制代码
<configuration packagingData="true"> ... </configuration> 复制代码
		statusListener
为configuration 的子元素。称为状态监听器,在 configuration 的子标签顶层,意指监听事件;	
<configuration> <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" /> ... the rest of the configuration file </configuration> 复制代码
属性 name , value 用来定义变量的 名称 和值 ,在上下文中可以通过 ${name} 的方式进行调用
<configuration>
  <property name="USER_HOME" value="/home/sebastien" />
  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>${USER_HOME}/myApp.log</file>
    <encoder>
      <pattern>%msg%n</pattern>
    </encoder>
  </appender>
  <root level="debug">
    <appender-ref ref="FILE" />
  </root>
</configuration>
复制代码
	如果 定义如下示例会去 variables1.properties 中读取配置信息
<configuration>
  <property file="src/main/java/chapters/configuration/variables1.properties" />
  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
     <file>${USER_HOME}/myApp.log</file>
     <encoder>
       <pattern>%msg%n</pattern>
     </encoder>
   </appender>
   <root level="debug">
     <appender-ref ref="FILE" />
   </root>
</configuration>
复制代码
	variables1.properties:
USER_HOME=/home/sebastien 复制代码
		appender
为configuration 的子元素,每个		appender
都是一个日志组件, 可以定义一种类型的日志;	
name
:appender 的名称,该值主要用于			ref
。		class
:定义appender 组件。		scope
:指定作用域 ;			LOCAL
,			CONTEXT
,			SYSTEM
		如下示例 : 定义2 个组件, 一个是文件存储,一个控制输出,通过 root 标签引用即可同时生效;
<configuration>
  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>myApp.log</file>
    <encoder>
      <pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
    </encoder>
  </appender>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%msg%n</pattern>
    </encoder>
  </appender>
  <root level="debug">
    <appender-ref ref="FILE" />
    <appender-ref ref="STDOUT" />
  </root>
</configuration>
复制代码
	
		contextName
configuration 的子元素。每一个logger  都可以绑定一个		contextName
,默认上下文名称为 default , 如果设定完成,则不能改变;	
<configuration>
  <contextName>myAppName</contextName>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d %contextName [%t] %level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>
  <root level="debug">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>
复制代码
	
用来设置某个包或及具体的某个类的日志输出以及指定		<appender>
; name  属性一个, level,addtivity(是否向上级loger传递打印信息) 属性可选	
如下所示,不想看见包chapters.configuration 中的debug级别日志,可以进行如下配置
<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!-- encoders are assigned the type
         ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>
  <logger name="chapters.configuration" level="INFO"/>
  <!-- Strictly speaking, the level attribute is not necessary since -->
  <!-- the level of the root level is set to DEBUG by default.       -->
  <root level="DEBUG">          
    <appender-ref ref="STDOUT" />
  </root>  
  
</configuration>
复制代码
	打印如下
17:34:07.578 [main] INFO chapters.configuration.MyApp3 - Entering application. 17:34:07.578 [main] INFO chapters.configuration.MyApp3 - Exiting application. 复制代码
root标签实质是		<logger>
标签,不过其是根标签;若		<logger >
或		<appender>
标签为设置输出级别时就会默认继承该标签设置的级别!	
<!-- 日志输出级别 --> <root level="INFO"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> </root> 复制代码
包含其它文件的配置信息
<configuration>
  <include file="src/main/java/chapters/configuration/includedConfig.xml"/>
  <root level="DEBUG">
    <appender-ref ref="includedConsole" />
  </root>
</configuration>
复制代码
	
includedConfig.xml 示例,必须包含		<included>
标签	
<included>
  <appender name="includedConsole" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>"%d - %m%n"</pattern>
    </encoder>
  </appender>
</included>
复制代码
	如过是URL
<include url="http://some.host.com/includedConfig.xml"/> 复制代码
为了支持  development, testing 和  production 多环境下logback 不冲突的问题,可以使用		<if>
,		then
进行配置,使目标环境生效;	
格式如下
<!-- if-then form -->
   <if condition="some conditional expression">
    <then>
      ...
    </then>
  </if>
  
  <!-- if-then-else form -->
  <if condition="some conditional expression">
    <then>
      ...
    </then>
    <else>
      ...
    </else>    
  </if>
复制代码
	<!-- 日志 appender : 按照每天生成日志文件 -->
<appender name="NORMAL-FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <append>true</append>
    <!-- 日志名称 -->
    <file>${logging.path}/zszxz-boot/zszxz-error.log</file>
    <!-- 每天生成一个日志文件,保存30天的日志文件 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!--日志文件输出的文件名:按天回滚 daily -->
        <FileNamePattern>${logging.path}/zszxz-boot/zszxz.log.%d{yyyy-MM-dd}</FileNamePattern>
        <!--日志文件保留天数-->
        <MaxHistory>30</MaxHistory>
    </rollingPolicy>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        <!-- 编码 -->
        <charset>UTF-8</charset>
    </encoder>
</appender>
复制代码
	<!-- 错误日志 appender : 按照每天生成日志文件 -->
<appender name="ERROR-FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <append>true</append>
    <!-- 过滤器,只记录 error 级别的日志 -->
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>error</level>
    </filter>
    <!-- 日志名称 -->
    <file>${logging.path}/zszxz-boot/zszxz-error.log</file>
    <!-- 每天生成一个日志文件,保存30天的日志文件 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!--日志文件输出的文件名:按天回滚 daily -->
        <FileNamePattern>${logging.path}/zszxz-boot/zszxz-error.log.%d{yyyy-MM-dd}</FileNamePattern>
        <!--日志文件保留天数-->
        <MaxHistory>30</MaxHistory>
    </rollingPolicy>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        <!-- 编码 -->
        <charset>UTF-8</charset>
    </encoder>
</appender>
复制代码