• Logback 标准xml参考


    强制:

    1. 【强制】应用中不可直接使用日志系统(Log4j、Logback)中的 API,而应依赖使用日志框架
      SLF4J 中的 API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。
      import org.slf4j.Logger;
      import org.slf4j.LoggerFactory;
      private static final Logger logger = LoggerFactory.getLogger(Abc.class);
    2. 【强制】日志文件推荐至少保存 15 天,因为有些异常具备以“周”为频次发生的特点。
    3. 【强制】应用中的扩展日志(如打点、临时监控、访问日志等)命名方式: appName_logType_logName.log。logType:日志类型,推荐分类有 stats/monitor/visit 等; logName:日志描述。这种命名的好处:通过文件名就可知道日志文件属于什么应用,什么类 型,什么目的,也有利于归类查找。
      正例:mppserver 应用中单独监控时区转换异常,如: mppserver_monitor_timeZoneConvert.log 说明:推荐对日志进行分类,如将错误日志和业务日志分开存放,便于开发人员查看,也便于 通过日志对系统进行及时监控。
    4. 【强制】对 trace/debug/info 级别的日志输出,必须使用条件输出形式或者使用占位符的方式。
      说明:logger.debug(“Processing trade with id: “ + id + “ and symbol: “ + symbol); 如果日志级别是 warn,上述日志不会打印,但是会执行字符串拼接操作,如果 symbol 是对象, 会执行 toString()方法,浪费了系统资源,执行了上述操作,最终日志却没有打印。 正例:(条件)
      if (logger.isDebugEnabled()) {
      logger.debug(“Processing trade with id: “ + id + “ and symbol: “ + symbol);
      }
      正例:(占位符)
      logger.debug(“Processing trade with id: {} and symbol : {} “, id, symbol);
    5. 【强制】避免重复打印日志,浪费磁盘空间,务必在 log4j.xml 中设置 additivity=false。
      正例:
    6. 【强制】异常信息应该包括两类信息:案发现场信息和异常堆栈信息。如果不处理,那么通过 关键字 throws 往上抛出。
      正例:logger.error(各类参数或者对象toString + “_” + e.getMessage(), e);

      推荐:

    7. 【推荐】谨慎地记录日志。生产环境禁止输出 debug 日志;有选择地输出 info 日志;如果使 用 warn 来记录刚上线时的业务行为信息,一定要注意日志输出量的问题,避免把服务器磁盘 撑爆,并记得及时删除这些观察日志。 说明:大量地输出无效日志,不利于系统性能提升,也不利于快速定位错误点。记录日志时请 思考:这些日志真的有人看吗?看到这条日志你能做什么?能不能给问题排查带来好处?
    8. 【推荐】可以使用 warn 日志级别来记录用户输入参数错误的情况,避免用户投诉时,无所适从。如非必要,请不要在此场景打出 error 级别,避免频繁报警。 说明:注意日志输出的级别,error 级别只记录系统逻辑出错、异常或者重要的错误信息。

    福利

    spring boot 相关日志配置说明

    spring boot 日志可以借住lombok插件。
    安装 lombok 的插件,并配置。
    Go to File > Settings > Plugins
    Click on Browse repositories…
    Search for Lombok Plugin
    Click on Install plugin
    Restart Android Studio
    允许注解处理,Settings -> Compiler -> Annotation Processors

    使用时,需要再类上面加注解 @Slf4j 则可以直接使用log变量进行日志处理。

    相关引用地址:
    http://blog.csdn.net/inke88/article/details/75007649

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration scan="true" scanPeriod="60 seconds" debug="false">

    <!--application.yml 传递参数,不能使用logback 自带的<property>标签 -->
    <springProperty scope="context" name="appname" source="logback.appname"/>
    <springProperty scope="context" name="logdir" source="logback.logdir"/>

    <contextName>${appname}</contextName>
    <!--======================================= 本地变量 ======================================== -->
    <!--在没有定义${LOG_HOME}系统变量的时候,可以设置此本地变量。提交测试、上线时,要将其注释掉,使用系统变量。 -->
    <property name="LOG_HOME" value="/Users/wuwei/Documents/Logs" />
    <!-- 应用名称:和统一配置中的项目代码保持一致(小写) -->大专栏  Logback 标准xml参考n>
    <property name="APP_NAME" value="test-demo" />
    <!--日志文件保留天数 -->
    <property name="LOG_MAX_HISTORY" value="30" />
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径 -->
    <!--应用日志文件保存路径 -->
    <property name="LOG_APP_HOME" value="${LOG_HOME}" />

    <!--=========================== 按照每天生成日志文件:默认配置=================================== -->
    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <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>
    </encoder>
    </appender>
    <!-- 文件输出 info -->
    <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!--如果只是想要 Info 级别的日志,只是过滤 info 还是会输出 Error 日志,因为 Error 的级别高,
    所以我们使用下面的策略,可以避免输出 Error 的日志-->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
    <!--过滤 Error-->
    <level>ERROR</level>
    <!--匹配到就禁止-->
    <onMatch>DENY</onMatch>
    <!--没有匹配到就允许-->
    <onMismatch>ACCEPT</onMismatch>
    </filter>
    <!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则
    如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天
    的日志改名为今天的日期。即,<File> 的日志都是当天的。
    -->
    <!--<File>${logdir}/%d{yyyy-MM-dd}/info.${appname}.%d{yyyy-MM-dd}.log</File>-->
    <!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
    <FileNamePattern>${logdir}/%d{yyyy-MM-dd}/info.%d{yyyy-MM-dd}.log</FileNamePattern>
    <!--只保留最近90天的日志-->
    <maxHistory>${LOG_MAX_HISTORY}</maxHistory>
    <!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
    <!--<totalSizeCap>1GB</totalSizeCap>-->
    </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{500} - %msg%n</pattern>
    </encoder>
    </appender>

    <!-- 文件输出 error -->
    <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!--如果只是想要 Error 级别的日志,那么需要过滤一下,默认是 info 级别的,ThresholdFilter-->
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
    <level>Error</level>
    </filter>
    <!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则
    如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天
    的日志改名为今天的日期。即,<File> 的日志都是当天的。 最好不要把<File>和<FileNamePattern>
    同时配置,否则按天生产文件夹的日期会出现错误。
    -->
    <!--<File>${logdir}/%d{yyyy-MM-dd}/error.${appname}.log</File>-->

    <!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
    <FileNamePattern>${logdir}/%d{yyyy-MM-dd}/error.${appname}.%d{yyyy-MM-dd}.log</FileNamePattern>
    <!--只保留最近90天的日志-->
    <maxHistory>${LOG_MAX_HISTORY}</maxHistory>
    <!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
    <!--<totalSizeCap>1GB</totalSizeCap>-->
    </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{500} - %msg%n</pattern>
    </encoder>
    </appender>

    <!--指定最基础的日志输出级别-->
    <root level="INFO">
    <!--appender将会添加到这个loger-->
    <appender-ref ref="STDOUT"/>
    <appender-ref ref="fileInfoLog"/>
    <appender-ref ref="fileErrorLog"/>

    </root>
    </configuration>
  • 相关阅读:
    hdu 1712(分组背包)
    hdu 3033(好题,分组背包)
    阶乘除法(很久之前的一道题,感觉挺好的,遂记录之)
    hdu 1559(最大子矩阵)
    hdu 1080(LCS变形)
    POJ 3458 Colour Sequence
    HUST 1599 Multiple
    HDU 3903 Trigonometric Function
    HUST 1605 Gene recombination
    UVA 11551 Experienced Endeavour
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12099705.html
Copyright © 2020-2023  润新知