springboot 使用指定 logback.xml 的方法:
application.yml 配置
logging:
config: classpath:conf/logback-spring.xml
path: d:/logs #日志路徑
logback-spring.xml 文件獲取 application.yml 里的值。logback 提供了 一個標簽 <springProperty>
。
<springProperty scope="context" name="log_home" source="logging.path"/>
例子:日志級別分離
<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<springProperty scope="context" name="log_home" source="logging.path"/>
<!--輸出表達式:時間 - 日志級別 線程 輸出日志的類 輸出的信息 換行-->
<property name="my_pattern"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} -%5p [%15.15t] [%-40.40logger{39}] %m%n"></property>
<!--日志保留的份數(shù):10份-->
<property name="my_max_history" value="10"></property>
<!--
文件輸出格式和頻率:也將作為文件名的一部分
yyyy-MM-dd-HH 每小時生成一個文件
yyyy-MM-dd 每天生成一個文件
-->
<property name="file_name" value="yyyy-MM-dd-HH"></property>
<!--控制臺輸出-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${my_pattern}</pattern>
<charset>utf8</charset>
</encoder>
</appender>
<!--只輸出 ERROR 以下級別-->
<appender name="INFOLOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<encoder>
<pattern>${my_pattern}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log_home}/hc_log_info_%d{${file_name}}.log</fileNamePattern>
<maxHistory>${my_max_history}</maxHistory>
</rollingPolicy>
</appender>
<!--輸出 WARN 和 ERROR 級別-->
<appender name="ERRORLOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
<encoder>
<pattern>${my_pattern}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log_home}/hc_log_error_%d{${file_name}}.log</fileNamePattern>
<maxHistory>${my_max_history}</maxHistory>
</rollingPolicy>
</appender>
<logger name="org.apache.catalina.startup.DigesterFactory" level="ERROR"/>
<logger name="org.apache.catalina.util.LifecycleBase" level="ERROR"/>
<logger name="org.apache.coyote.http11.Http11NioProtocol" level="WARN"/>
<logger name="org.apache.sshd.common.util.SecurityUtils" level="WARN"/>
<logger name="org.apache.tomcat.util.net.NioSelectorPool" level="WARN"/>
<logger name="org.crsh.plugin" level="WARN"/>
<logger name="org.crsh.ssh" level="WARN"/>
<logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="ERROR"/>
<logger name="org.hibernate.validator.internal.util.Version" level="WARN"/>
<logger name="org.springframework.boot.actuate.autoconfigure.CrshAutoConfiguration" level="WARN"/>
<logger name="org.springframework.boot.actuate.endpoint.jmx" additivity="false"></logger>
<logger name="org.thymeleaf" additivity="false"></logger>
<logger name="com.gov.xsbn" level="DEBUG"></logger>
<root level="INFO">
<appender-ref ref="STDOUT"/>
<appender-ref ref="INFOLOG"/>
<appender-ref ref="ERRORLOG"/>
</root>
</configuration>
綜合筆記
說明:這里的配置是指xml的配置掰曾。
思維整理:
image.png
configuration
標簽:
image.png
properties
標簽
image.png
root
標簽
- 屬性:level 即輸出的級別(TRACE, DEBUG, INFO, WARN, ERROR, ALL和OFF)
- 包含標簽:
-
<appender-ref ref="FILE" />
- 屬性 ref : 輸出給誰。也就是 appender
- 真相:
-
<root>
也是一個<logger>
枯跑。但是它是根 logger 。其實他也有 name 屬性 白热。只是由于是根敛助, 所有就被命名成了 root。
logger
標簽
-
- 用來設(shè)置具體某個一包或類的日志級別屋确。
- 屬性:
- name : 指定的類或包
- level : 輸出級別
- 包含標簽:
-
<appender-ref ref="FILE" />
- 屬性 ref : 輸出給誰纳击。也就是 appender
appender
標簽
- 屬性 ref : 輸出給誰纳击。也就是 appender
- 屬性:
- name:我就是那個誰,給我起個名字
- class:真正干活的人攻臀。寫的是全類名
- image.png
可以看到焕数,有很多。常用的有一下幾個:
ch.qos.logback.core.ConsoleAppender
,ch.qos.logback.core.rolling.RollingFileAppender
- 包含的標簽
appender 完整配置:分為2個茵烈,一個是控制臺百匆,一個是滾動文件
<!-- 控制臺輸出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!--encoder : 日志信息的輸出模式-->
<encoder>
<!--輸出例子:控制臺輸出:- xxxxxxxxxxxxxxxxxxx -->
<pattern>控制臺日志: - %msg %n</pattern>
</encoder>
</appender>
<!--文件滾動輸出-->
<appender name="FILELOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--encoder : 日志信息的輸出模式-->
<encoder>
<pattern>文件輸出: - %msg %n</pattern>
</encoder>
<!--
輸出過濾器:給輸出的日志在進行一層過濾
常用的:
ch.qos.logback.classic.filter.LevelFilter 復雜點砌些,下面寫了一個例子
ch.qos.logback.classic.filter.ThresholdFilter 簡單呜投,輸出的級別大于等于 level 標簽里的值都輸出
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!--
只輸出 INFO 的內(nèi)容
-->
<!--level 判斷條件 -->
<level>INFO</level>
<!--
onMatch(匹配成功) 有2個值: ACCEPT 和 DENY
輸出的級別等于 level 標簽里的 級別時:
如果值 = ACCEPT ,則輸出
如果值 = DENY , 不輸出
-->
<onMatch>ACCEPT</onMatch>
<!--
onMismatch(匹配不成功) 有2個值: ACCEPT 和 DENY
輸出的級別等于 level 標簽里的 級別時:
如果值 = ACCEPT 存璃,則輸出
如果值 = DENY , 不輸出
-->
<onMismatch>DENY</onMismatch>
</filter>
<!--
生成的文件名稱:
ch.qos.logback.core.rolling.TimeBasedRollingPolicy:時間滾動策略
-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--每分鐘生成一個文件-->
<fileNamePattern>d:/lijia_%d{yyyy-MM-dd_hh_mm}.log</fileNamePattern>
<!--只保留10個文件-->
<maxHistory>10</maxHistory>
</rollingPolicy>
</appender>