SpringBoot集成logback

一、logback说明

Logback本质上是一个优化后的Log4j,但相比于Log4j有太多的优点。

1.更快的实施:Logback重写了Log4j内部实现,在关键路径提升了十倍速度,减少了内存损耗。
2.更广泛的测试:Logback比Log4j进行了更长时间、更高级别的测试。
与SLF4J的完美结合.
3.更广泛的文档:Logback具有更详细并且不断更新的文档。
4.Logback从0.9.22版本开始同时支持XML与Groovy语法的配置文件。
5.Logback可以自动扫描并加载修改后的配置文件,并且不启用新的线程资源。
6.Logback在I/O失败的情况下,不需要重新应用即可在server正常后恢复正常输出。
7.Logback通过对于maxHistory属性的设置可以自动删除旧的日志文件。
8.Logback的RollingFileAppender可以异步的对旧的日志文档进行压缩。
9.Logback的谨慎模式下多个FileAppender可以写入同一个日志文件。
10.Logback具有Lilith可以查看大数据量级的日志与访问事件查看器工具。
11.Logback配置文件中支持条件判断语句的写法,从而实现不同环境个别配置自动替换。
12.Logback中支持对于特定用户显示较低与配置日志等级的日志。
13.Logback提供了可以通过给定的属性对日志进行分离的SiftingAppender
14.Logback的异常堆栈信息将会打印出相应包的信息。
15.Logback的Logback-access提供了HTTP访问日志功能。

二、配置文件和引入

与Log4j相同,其首先会在classpath下搜寻配置文件,但在搜寻不到的情况下Logback会自动调用BasicConfigurator默认配置,输出到控制台。

 <!-- logback-core -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>

        <!-- 引入logback对SLF4J的实现 logback-classic -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
            <scope>compile</scope>
        </dependency>

        <!-- 引入SLF4J -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.26</version>
        </dependency>

在resources下创建logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--
 scan属性:默认为true,Logback将会扫描配置文件,如果配置文件发生改变时,会自动加载
 scanPeriod:Logback扫描配置文件时间间隔,默认单位为毫秒,可配置单位为毫秒、秒、分、时 milliseconds, seconds, minutes or hours
 debug:默认为false,是否打印Logback内部信息,当为true时可以查看Logback的运行信息
 packagingData:默认false,在打印异常堆栈时是否打印相关包信息
-->
<configuration scan="true" scanPeriod="30 seconds" >

    <!-- 定义参数变量 -->
    <property name="log.dir" value="appLogs"/>
    <property name="encoding" value="UTF-8"/>
    <property name="normal-pattern" value="%d{yyyy-MM-dd.HH:mm:ss} %-5level [%thread] %logger.%M:%L  %msg%n"/>
    <property name="plain-pattern" value="%d{yyyy-MM-dd.HH:mm:ss} %msg%n"/>
    <property name="common-pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %p [%c{50}#%M:%L] [%X{traceId}] %m%n"/>

    <!-- consoleAppender:控制台输出 -->
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoder:对日志日期格式化,类似于layout,除了将时间转化为数组,还会将转换后的数组输出到相应的文件中 -->
        <encoder charset="UTF-8">
            <!-- 定义日志的输出格式 -->
            <pattern>${common-pattern}</pattern>
        </encoder>
    </appender>

    <!-- 文件输出策略设置 -->
    <appender name="mainlog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 过滤器,过滤掉不是指定日志水平的日志 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <!-- 文件路径 -->
        <file>${log.dir}/main.log</file>
        <!--当为true时,不支持FixedWindowRollingPolicy。支持TimeBasedRollingPolicy,但是有两个限制,1不支持也不允许文件压缩,2不能设置file属性,必须留空。日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低。-->
        <prudent>false</prudent>
        <encoder charset="UTF-8">
            <pattern>${common-pattern}</pattern>
        </encoder>
        <!--配置日志所生成的目录以及生成文件名的规则-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 设置文件名称 当前日志为每个小时做一次历史日志压缩文件保存 -->
            <fileNamePattern>${log.dir}/main.%d{yyyy-MM-dd-HH}-%i.log.gz</fileNamePattern>
            <!--文件达到 最大值时会被压缩和切割  当单个文件大于100M后,会创建下一个文件(%i参数) -->
            <maxFileSize>100MB</maxFileSize>
        </rollingPolicy>
    </appender>
    <!-- 文件输出策略设置 -->
    <appender name="errorlog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 过滤器,过滤掉不是指定日志水平的日志 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <file>${log.dir}/errors.log</file>
        <prudent>false</prudent>
        <encoder charset="UTF-8">
            <pattern>${common-pattern}</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${log.dir}/error.%d{yyyy-MM-dd-HH}-%i.log.gz</fileNamePattern>
            <maxFileSize>100MB</maxFileSize>
        </rollingPolicy>
    </appender>

    <!-- 子节点logger:用来设置某一个包或具体的某一个类的日志打印级别、以及指定Appender -->
    <!--
        name:指定此logger管理的包或者类
        level:指定此logger的消息输出级别
        additivity:默认为true,是否向上级logger传递消息
    -->
    <logger name="com.example.service.*" level="ERROR" additivity="false">
        <appender-ref ref="errorlog" />
    </logger>

    <!-- 根Logger节点,最顶级 代表所有的类-->
    <root level="ERROR">
        <appender-ref ref="errorlog"/>
        <appender-ref ref="stdout"/>
    </root>
        <root level="INFO">
           <appender-ref ref="mainlog"/>
       </root>
</configuration>

三、代码

package com.example.service;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

@Service
public class AdminService {
    //创建日志对象
    private final Logger logger = LoggerFactory.getLogger(AdminService.class);

    public void doSomething() {
    	 String msg = "内容";
        //用占位符做日志处理
        logger.info("这是日志{}",msg);
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangyue23com

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值