美文网首页
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