技术查漏补缺(1)Logback

发布时间:2024年01月05日

一、下定义:Logback是一个开源的日志组件

二、Logback的maven

<!--这个依赖直接包含了 logback-core 以及 slf4j-api的依赖-->
<dependency>
     <groupId>ch.qos.logback</groupId>
     <artifactId>logback-classic</artifactId>
     <version>1.2.3</version>
</dependency>

三、Logbakc的小常识

我们讲实战,LogBack在springboot中的使用(SpringBootCloud也是一样的)

小常识:SpringBoot会默认加载classpath:logback.xml或者classpath:logback-spring.xml或者classpath:logback-spring.groovy等文件作为日志配置文件。

当然我们也可以指定默认加载的日志配置文件

在xml格式是

logging
    config: classpath:xxx.xml

然后在properties是这样子的

logging.config=classpath:xxx.xml 

三、logback-spring.xml配置说明的配置

基础配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
 <!--
    %p:输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
    %r:输出自应用启动到输出该日志讯息所耗费的毫秒数
    %t:输出产生该日志事件的线程名
    %f:输出日志讯息所属的类别的类别名
    %c:输出日志讯息所属的类的全名
    %d:输出日志时间点的日期或时间,指定格式的方式: %d{yyyy-MM-dd HH:mm:ss}
    %l:输出日志事件的发生位置,即输出日志讯息的语句在他所在类别的第几行。
    %m:输出代码中指定的讯息,如log(message)中的message
    %n:输出一个换行符号
-->
    <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%logger{50}包名缩写,%n是换行符 -->
    <property name="log_pattern" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n"/>
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <!-- 日志存储路径 -->
    <springProperty
            scope="context"
            name="defaultLogDir"
            source="qy.log.history.logDir"
    />

    <!-- 日志备份保留时长 -->
    <springProperty
            scope="context"
            name="logMaxHistory"
            source="qy.log.history.maxHistory"
    />

    <!-- 日志大小 -->
    <springProperty
            scope="context"
            name="logMaxSize"
            source="qy.log.history.logMaxSize"
    />
    <property name="logMaxSize" value="200MB"/>
    <!--&lt;!&ndash;控制台日志, 控制台输出 &ndash;&gt;-->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${log_pattern}</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>


    <!--文件日志, 按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <!--<file>${defaultLogDir:-/qy/qy-doctorservice/logs}/log/docser-main.log</file>-->
        <!--TimeBasedRollingPolicy 基于时间来定义轮转策略 -->
        <!--SizeAndTimeBasedRollingPolicy 基于大小以及时间的轮转策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的路径和文件名-->
            <!--该属性定义了轮转时的属性名。它的值应该由文件名加上一个 %d 的占位符。%d 应该包含 java.text.SimpleDateFormat 中规定的日期格式。
            如果省略掉这个日期格式,那么就默认为 yyyy-MM-dd。轮转周期是通过 fileNamePattern 推断出来的。
            注意事项:
            1.如果FileNamePattern中指定多个 %d,只能报留一个%d作为主要的,用于推断轮转周期。其它的 %d 占位符必须通过 'aux' 标记为辅助的。
            2.MaxHistory 用来控制最多保留多少数量的归档文件,将会异步删除旧的文件。
                         保留日志的量 = 轮转周期 * MaxHistory
            3.FileNamePattern中除了 %d 之外还有 %i。这两个占位符都是强制要求的。在当前时间还没有到达周期轮转之前,日志文件达到了 maxFileSize 指定的大小,
              会进行归档,递增索引从 0 开始。
            -->
            <!--轮询周期:天-->
            <!--<FileNamePattern>${defaultLogDir:-/qy/qy-doctorservice/logs}/log/%d{yyyy-MM-dd, aux}/credit.%d.%i.log</FileNamePattern>-->
            <!-- 每天轮转(晚上零点),自动将归档文件压缩成 GZIP 格式,减少日志占用空间-->
            <FileNamePattern>${defaultLogDir:-/qy/qy-doctorservice/logs}/log/%d{yyyy-MM-dd, aux}/credit.%d.%i.zip</FileNamePattern>
            <!--日志文件保留轮询周期个数-->
            <MaxHistory>${logMaxHistory:-15}</MaxHistory>
            <!--单个日志文件最大的大小-->
            <MaxFileSize>${logMaxSize:-100MB}</MaxFileSize>
            <!--这个可选属性用来控制所有归档文件总的大小。当达到这个大小后,旧的归档文件将会被异步的删除。使用这个属性时还需要设置 maxHistory 属性。
            而且,maxHistory 将会被作为第一条件,该属性作为第二条件。-->
            <!--归档文件总的大小-->
            <totalSizeCap>1GB</totalSizeCap>
            <!--cleanHistoryOnStart=true时在 appender 启动的时候,归档文件将会被删除。默认的值为 false-->
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <!--<append>:如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true。-->
        <append>false</append>
        <encoder>
            <pattern>${log_pattern}</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>
    <!-- 日志输出级别 -->
    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE"/>
    </root>
</configuration>

效果是:

1.日志文件根据日期创建不同的文件夹,日志的归档单位为一天。

2.每个归档日期结束后自动压缩当天日志文件,并根据日期生成新的日志文件夹和日志文件。

3.单个日志的分割,日志可根据配置的单个日志文件大小进行分割。

这个是黑马头条里面的logBack,这个采用的是debug的启动,按需求配置即可

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

<configuration>
    <!--定义日志文件的存储地址,使用绝对路径-->
    <property name="LOG_HOME" value="e:/logs"/>

    <!-- Console 输出设置 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>

    <!-- 按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <fileNamePattern>${LOG_HOME}/leadnews.%d{yyyy-MM-dd}.log</fileNamePattern>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 异步输出 -->
    <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
        <queueSize>512</queueSize>
        <!-- 添加附加的appender,最多只能添加一个 -->
        <appender-ref ref="FILE"/>
    </appender>


    <logger name="org.apache.ibatis.cache.decorators.LoggingCache" level="DEBUG" additivity="false">
        <appender-ref ref="CONSOLE"/>
    </logger>
    <logger name="org.springframework.boot" level="debug"/>
    <root level="info">
        <!--<appender-ref ref="ASYNC"/>-->
        <appender-ref ref="FILE"/>
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

日志生成位置在

?

?

文章来源:https://blog.csdn.net/qq_62773260/article/details/135398405
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。