美文网首页
houyi平台-开发指南-日志记录

houyi平台-开发指南-日志记录

作者: do_young | 来源:发表于2020-01-19 17:07 被阅读0次

日志说明

在需要使用记录日志的java类上使用@Sl4j注解,就可以使用log.xx方法,记录日志了。示例如下:

@Slf4j
@Component
public class DemoDomainServiceFallbackFactory implements FallbackFactory<DemoDomainService> {
    @Override
    public DemoDomainService create(Throwable throwable) {
        return new DemoDomainService() {
            @Override
            public PageResult<DemoDomain> list(Map<String, Object> params) {
                log.error("通过翻页信息查询DemoDomain异常:{}", params, throwable);

使用指南

由于日志服务一般都在ApplicationContext创建前就初始化了,它并不是必须通过Spring的配置文件控制。因此通过系统属性和传统的Spring Boot外部配置文件依然可以很好的支持日志控制和管理。

1.1 默认日志 Logback:

默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台。
日志输出内容元素具体如下:
时间日期:精确到毫秒
日志级别:ERROR, WARN, INFO, DEBUG or TRACE
进程ID
分隔符:— 标识实际日志的开始
线程名:方括号括起来(可能会截断控制台输出)
Logger名:通常使用源代码的类名
日志内容

1.2 控制台输出

日志级别从低到高分为:
TRACE < DEBUG < INFO < WARN < ERROR < FATAL。

1.3 文件及位置:logback-spring.xml

image.png

1.4 元素结点

1.4.1 根节点<configuration>包含的属性

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
...
</configuration>

scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。

1.4.2 根节点<configuration>的子节点

<configuration>下面一共有2个属性,3个子节点,分别是:

﹡ 属性一:设置上下文名称<contextName>

<contextName>${APP_NAME}</contextName>

每个logger都关联到logger上下文,默认上下文名称为“default”。但可以使用设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改,可以通过%contextName来打印日志上下文名称。

﹡ 属性二:设置变量<property>

<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN" value="[${APP_NAME}:${ServerIP}:${ServerPort}] %clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%level){blue} %clr(${PID}){magenta} %clr([%thread]){orange} %clr(%logger){cyan} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}" />
<property name="CONSOLE_LOG_PATTERN_NO_COLOR" value="[${APP_NAME}:${ServerIP}:${ServerPort}] %d{yyyy-MM-dd HH:mm:ss.SSS} %level ${PID} [%thread] %logger %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}" />

通过<property>定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。

﹡ 子节点一<appender>

<!-- 控制台日志 -->
<appender name="StdoutAppender" class="ch.qos.logback.core.ConsoleAppender">
    <withJansi>true</withJansi>
    <encoder>
        <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        <charset>UTF-8</charset>
    </encoder>
</appender>

appender用来格式化日志输出节点,有俩个属性name和class,class用来指定哪种输出策略,常用就是控制台输出策略和文件输出策略。

控制台输出ConsoleAppender:

<!-- 控制台日志 -->
<appender name="StdoutAppender" class="ch.qos.logback.core.ConsoleAppender">
    ...
</appender>

输出到文件RollingFileAppender
另一种常见的日志输出到文件,随着应用的运行时间越来越长,日志也会增长的越来越多,将他们输出到同一个文件并非一个好办法。RollingFileAppender用于切分文件日志:

<!-- 按照每天生成常规日志文件 -->
<appender name="FileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
      <file>${LOG_FILE}/${APP_NAME}.log</file>
      <encoder>
          <pattern>${CONSOLE_LOG_PATTERN_NO_COLOR}</pattern>
          <charset>UTF-8</charset>
      </encoder>
      <!-- 基于时间的分包策略 -->
      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
          <fileNamePattern>${LOG_FILE}/${APP_NAME}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
          <!--保留时间,单位:天-->
          <maxHistory>${LOG_FILEMAXDAY}</maxHistory>
          <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
              <maxFileSize>${LOG_MAXFILESIZE}</maxFileSize>
          </timeBasedFileNamingAndTriggeringPolicy>
     </rollingPolicy>
     <filter class="ch.qos.logback.classic.filter.LevelFilter">
         <level>INFO</level>
     </filter>
</appender>

其中重要的是rollingPolicy的定义,上例中<fileNamePattern>定义了日志的切分方式——把每一天的日志归档到一个文件中,<maxHistory>表示只保留最近n天的日志,以防止日志填满整个磁盘空间。同理,可以使用%d{yyyy-MM-dd_HH-mm}来定义精确到分的日志切分方式。<totalSizeCap>用来指定日志文件的上限大小,例如设定值,那么到了这个值,就会删除旧的日志。
<encoder>表示对日志进行编码:

%d{HH: mm:ss.SSS}——日志输出时间

%thread——输出日志的进程名字,这在Web应用以及异步任务处理中很有用

%-5level——日志级别,并且使用5个字符靠左对齐

%logger{36}——日志输出者的名字

%msg——日志消息

%n——平台的换行符

﹡ 子节点二<root>

root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性。
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL,默认是DEBUG。

<root>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个loger。

<root level="INFO">
      <appender-ref ref="StdoutAppender"/>
      <appender-ref ref="FileAppender"/>
</root>

﹡ 子节点三<loger>

`<loger>`用来设置某一个包或者具体的某一个类的日志打印级别、以及指定`<appender>`。`<loger>`仅有一个name属性,一个可选的level和一个可选的addtivity属性。

name:用来指定受此loger约束的某一个包或者具体的某一个类。
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。如果未设置此属性,那么当前loger将会继承上级的级别。
addtivity:是否向上级loger传递打印信息。默认是true。

相关文章

网友评论

      本文标题:houyi平台-开发指南-日志记录

      本文链接:https://www.haomeiwen.com/subject/gvnrzctx.html