项目规范-日志使用(logback初探)

很长时间没有在博客上进行总结了,我还一直在技术的道路上渐行渐远哈哈~,冒个泡,每次进行博客时总是困于,自己的总结太浅显了,所以后面慢慢就变成了在自己本地做做一些笔记没有进行博客输出,最近看到一段话,对我触动很大:总结的过程是一种脑波的逻辑性输出,可以提升知识结构的沉淀,加深印象和理解,重新思考,梳理再用文字呈现,在这个过程中能够更加清晰地明白自己的思路与想法.所以今天又拾起来,在技术深度方向慢慢钻研

先贴一篇官网:logback:http://www.logback.cn/


什么是日志

简单的说,日志就是记录程序的运行轨迹,方便查找关键信息,便于我们快速的定位解决问题

常见的日志框架

什么是logback

简单的来说就是用来进行日志输出,官方定义:logback 继承自 log4j,它建立在有十年工业经验的日志系统之上。它比其它所有的日志系统更快并且更小

项目应用案例

案例1

文件按以下方式输出:
info.log_2020-10-14_14.0.log 按小时切割
info.log.2020-10-14.0.log 按天切割
info.log.2020-09-23_20.0.log.zip 日志压缩

<!--这里放公共变量 -->
    <property name="iot.log.dir" value="logs"/>
    <property name="INFO_FILE" value="${iot.log.dir}/info.log}"/>
    <property name="FILESIZE" value="50MB"/>
    <property name="MAXHISTORY" value="100"/>
    <timestamp key="DATETIME" datePattern="yyyy-MM-dd HH:mm:ss"/>

    <property name="BASE_PATTERN" value="[%-5level] %d{${DATETIME}} [%thread] %logger{36} - %m%n"/>

    <!--1:  日志文件名称: info.log_2020-10-14_14.0.log -->
    <appender name="INFO-OUT" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${BASE_PATTERN}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${INFO_FILE}_%d{yyyy-MM-dd_HH}.%i.log</fileNamePattern>
            <maxHistory>30</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>1GB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>-->

    <!--2: 日志文件名称: info.log.2020-10-14.0.log 按天切割-->
    <appender name="INFO-OUT" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${BASE_PATTERN}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${INFO_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxHistory>30</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>1GB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>


    <!--3:  日志文件名称: info.log.2020-10-14.0.log 按天切割 达到1GB则进行压缩 info.log.2020-09-23_20.0.log.zip -->
    <appender name="INFO-OUT" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${BASE_PATTERN}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${INFO_FILE}.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
            <maxHistory>30</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>1GB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>



    <root level="INFO">
        <appender-ref ref="INFO-OUT"/>
    </root>

案例2

文件输出格式为:
在这里插入图片描述

<property name="log.dir" value="../"/>
<property name="ROOT" value="${log.dir}/"/>


<appender name="INFO-OUT" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>[%-5level] %d{${DATETIME}} [%thread] %logger{36} - %m%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${ROOT}%d/info.%i.log</fileNamePattern>
            <maxHistory>10</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>1GB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
</appender>

案例3

指定输出文件,自定义输出文件

    <appender name="**LogAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        
    </appender>

   <logger name="***logname" additivity="false">
      <appender-ref ref="**LogAppender"/>
   </logger>

   项目中调用时使用 private static final ILog            LOGGER     = LogFactory.getLog("***logname");

背景

  1. 随着业务的增长,日志的不规范问题逐步暴露出来,一方面日志非常大(个别日志,几十G~上百G).我们在grep日志的时候如果日志量过大,cpu 也会飙升.
  2. 多个服务混合部署在一台服务器上,尽管磁盘比较大,也会出现磁盘不足的报警

解决方案:

1. 对日志进行切割
2. 对日志进行压缩,减少磁盘占用量

日志按天/小时切割

<property name="project.log.dir" value="/windows/c/users/logs/project"/>
<property name="INFO_FILE" value="${project.log.dir}/info.log"/>
<property name="BAMAI_PATTERN" value="[%p][%date{yyyy-MM-dd'T'HH:mm:ss.SSSZ}][%thread-%logger{0}] %m%n"/>


<appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
     <encoder>
        <pattern>${BAMAI_PATTERN}</pattern>
     </encoder>
     <file>${INFO_FILE}</file>
     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${INFO_FILE}.%d{yyyy-MM-dd}.log</fileNamePattern>
        <!-- 按天做切割,最多存储多少天的日志-->
          <maxHistory>10</maxHistory>
        <totalSizeCap>3GB</totalSizeCap>
     </rollingPolicy>
 </appender>


<root level="INFO">
    <appender-ref ref="infoAppender"/>
</root>

有时你希望按时轮转,但同时又想限制每个日志文件的大小。特别是如果后期处理工具需要对日志进行大小限制。

TimeBasedRollingPolicy 可以限制归档文件总的大小。所以如果你想要这个限制,你可以通过设置 totalSizeCap 来达到这个目的.除了 %d 之外还有 %i。这两个占位符都是强制要求的。在当前时间还没有到达周期轮转之前,日志文件达到了 maxFileSize 指定的大小,会进行归档,递增索引从 0 开始

日志压缩

在服务器上每天要产生上百G的日志文件,这样占用磁盘空间很大,需要进行日志压缩来减少磁盘空间占用.

   <property name="project.log.dir" value="/windows/c/users/logs/project"/>
   <property name="propertyname" value="@iot.log.dir@logname.log" />
  
    <appender name="**LogAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>[%p][%d{yyyy-MM-dd'T'HH:mm:ss.SSSZ}] %m%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <file>${propertyname}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${propertyname}.%d{yyyy-MM-dd}</fileNamePattern>
            <!-- 按天做切割,最多存储多少天的日志-->
            <maxHistory>20</maxHistory>
            <!-- 存储的日志总量 -->
            <totalSizeCap>3GB</totalSizeCap>
        </rollingPolicy>
    </appender>

   <logger name="***logname" additivity="false">
      <appender-ref ref="**LogAppender"/>
   </logger>

TimeBasedRollingPolicy 支持文件自动压缩。如果 fileNamePattern 以 .gz 或者 .zip 结尾,将会启动这个特性。

小结
日志输出是我们在项目输出时

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值