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>
<!--日志保留的份数: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的配置。
思维整理:
configuration
标签:
properties
标签
root
标签
- 属性:level 即输出的级别(TRACE, DEBUG, INFO, WARN, ERROR, ALL和OFF)
- 包含标签:
-
<appender-ref ref="FILE" />
- 属性 ref : 输出给谁。也就是 appender
- 真相:
-
<root>
也是一个<logger>
。但是它是根 logger 。其实他也有 name 属性 。只是由于是根, 所有就被命名成了 root。
logger
标签
-
- 用来设置具体某个一包或类的日志级别。
- 属性:
- name : 指定的类或包
- level : 输出级别
- 包含标签:
-
<appender-ref ref="FILE" />
- 属性 ref : 输出给谁。也就是 appender
appender
标签
- 属性 ref : 输出给谁。也就是 appender
- 属性:
- name:我就是那个谁,给我起个名字
- class:真正干活的人。写的是全类名
可以看到,有很多。常用的有一下几个:
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 的内容
-->
<!--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>