spring boot——logback基本配置

1. spring boot日志基本了解

spring boot内部使用了Commons Logging来记录日志,同样也保留了外部接口集成其他的日志框架,如:Java-Util-Logging,log4j,slf4j以及这次要讲到的logback。想要使用其他的日志框架就必须先得配置,默认情况下会使用logback日志框架

1.1 配置控制台日志的debug级别
默认情况下控制台是不会输出debug级别的日志的,想要在控制台输出debug级别的日志,只需要在yml配置文件中加入以下配置即可在控制台输出DEBUG日志(但不包含自己应用中的debug日志)。友情提示:debug的日志级别比info级别低哦!
debug: false #控制台输出debug
1.2 如何在生产环境下配置日志的debug级别
java -jar ${path}/*.jar --debug

在启动命令后面加上–debug即可输出debug级别日志

1.3 配置log输出到文件当中

默认情况下spring boot不会将日志输出到文件中,但是我们可以在配置文件当中配置文件名称、路径、日志输出等级以及配置文件所在路径。只需要添加如下配置:

logging:
  file: god.log
  path: /Users/wujiaqi/Desktop
  level: debug
  config: classpath:logback-spring.xml

这里需要注意一下注意事项:

1️⃣.这里若不配置具体的包的日志级别,日志文件信息将为空
2️⃣.若只配置logging.path,那么将会在/Users/wujiaqi/Desktop文件夹生成一个日志文件为spring.log(ps:该文件名是固定的,不能更改)。如果path路径不存在,会自动创建该文件夹
3️⃣.若只配置logging.file,那将会在项目的当前路径下生成一个god.log日志文件。这里可以使用绝对路径如,会自动在桌面下创建文件夹和相应的日志文件。
logging.file=/Users/wujiaqi/Desktop/god.log
4️⃣.logging.path和logging.file同时配置,不会在这个路径有/Users/wujiaqi/Desktop日志生成,只有file属性会生效
5️⃣.logging.path和logging.file的value都可以是相对路径或者绝对路径

总结为三点:

1️⃣.日志级别必须设置
2️⃣.file的优先级比path高
3️⃣.可以为绝对路径或者相对路径

这只是基础的配置,详细配置我们可以通过config属性定义配置文件所在路径,定义具体的配置文件。

2. logback介绍以及配置

2.1 logback简介

Logback是log4j框架的作者开发的新一代日志框架,它效率更高、能够适应诸多的运行环境,同时天然支持SLF4J。

2.1.1 为什么要使用logback ?
——在开发中不建议使用System.out因为大量的使用会增加资源的消耗。因为使用System.out是在当前线程执行的,写入文件也是写入完毕之后才继续执行下面的程序。而使用Log工具不但可以控制日志是否输出,怎么输出,它的处理机制也是通知写日志,继续执行后面的代码不必等日志写完。
——logback高效输出日志,其比log4j效率高。
——Spring Boot 提供了一套日志系统,logback是最优先的选择。
2.1.2 Logback的结构
   LogBack被分为3个组件,logback-core, logback-classic 和 logback-access.其中logback-core提供了LogBack的核心功能,是另外两个组件的基础。logback-classic则实现了Slf4j的API,所以当想配合Slf4j使用时,需要将logback-classic加入classpath。logback-access是为了集成Servlet环境而准备的,可提供HTTP-access的日志接口;
2.2 logback与log4j对比

Logback和log4j是非常相似的,如果你对log4j很熟悉,那对logback很快就会得心应手。下面列了logback相对于log4j的一些优点:

**1、更快的实现**  Logback的内核重写了,在一些关键执行路径上性能提升10倍以上。而且logback不仅性能提升了,初始化内存加载也更小了。

**2、非常充分的测试**  Logback经过了几年,数不清小时的测试。Logback的测试完全不同级别的。

**3、Logback-classic非常自然实现了SLF4j**    Logback-classic实现了 SLF4j。在使用SLF4j中,你都感觉不到logback-classic。而且因为logback-classic非常自然地实现了SLF4J,所以切换到log4j或者其他,非常容易,只需要提供成另一个jar包就OK,根本不需要去动那些通过SLF4JAPI实现的代码。

**4、非常充分的文档**  官方网站有两百多页的文档。

**5、自动重新加载配置文件**  当配置文件修改了,Logback-classic能自动重新加载配置文件。扫描过程快且安全,它并不需要另外创建一个扫描线程。这个技术充分保证了应用程序能跑得很欢在JEE环境里面。

**6、Lilith**   Lilith是log事件的观察者,和log4j的chainsaw类似。而lilith还能处理大数量的log数据 。

**7、谨慎的模式和非常友好的恢复**  在谨慎模式下,多个FileAppender实例跑在多个JVM下,能 够安全地写道同一个日志文件。RollingFileAppender会有些限制。Logback的FileAppender和它的子类包括 RollingFileAppender能够非常友好地从I/O异常中恢复。

**8、配置文件可以处理不同的情况**   开发人员经常需要判断不同的Logback配置文件在不同的环境下(开发,测试,生产)。而这些配置文件仅仅只有一些很小的不同,可以通过,和来实现,这样一个配置文件就可以适应多个环境。

**9、Filters(过滤器**)  有些时候,需要诊断一个问题,需要打出日志。在log4j,只有降低日志级别,不过这样会打出大量的日志,会影响应用性能。在Logback,你可以继续 保持那个日志级别而除掉某种特殊情况,如alice这个用户登录,她的日志将打在DEBUG级别而其他用户可以继续打在WARN级别。要实现这个功能只需 加4行XML配置。可以参考MDCFIlter 。

   **10、SiftingAppender(一个非常多功能的Appender)**  它可以用来分割日志文件根据任何一个给定的运行参数。如,SiftingAppender能够区别日志事件跟进用户的Session,然后每个用户会有一个日志文件。

   **11、自动压缩已经打出来的log**  RollingFileAppender在产生新文件的时候,会自动压缩已经打出来的日志文件。压缩是个异步过程,所以甚至对于大的日志文件,在压缩过程中应用不会受任何影响。

   **12、堆栈树带有包版本**  Logback在打出堆栈树日志时,会带上包的数据。

   **13、自动去除旧的日志文件**  通过设置TimeBasedRollingPolicy或者SizeAndTimeBasedFNATP的maxHistory属性,你可以控制已经产生日志文件的最大数量。如果设置maxHistory 12,那那些log文件超过12个月的都会被自动移除。
2.3 自定义日志配置

由于日志服务一般都在ApplicationContext创建前就初始化了,它并不是必须通过Spring的配置文件控制。因此通过系统属性和传统的Spring Boot外部配置文件依然可以很好的支持日志控制和管理。
根据不同的日志系统,你可以按如下规则组织配置文件名,就能被正确加载:

Logback:logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
Log4j:log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml
Log4j2:log4j2-spring.xml, log4j2.xml
JDK (Java Util Logging):logging.properties

Spring Boot官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml),命名为logback-spring.xml的日志配置文件,spring boot可以为它添加一些spring boot特有的配置项(下面会提到)。
上面是默认的命名规则,并且放在src/main/resources下面即可。
如果你即想完全掌控日志配置,但又不想用logback.xml作为Logback配置的名字,可以通过logging.config属性指定自定义的名字:
logging.config=classpath:logging-config.xml
虽然一般并不需要改变配置文件的名字,但是如果你想针对不同运行时Profile使用不同的日
志配置,这个功能会很有用。

2.4 logback属性介绍
2.4.1根节点< configuration >包含的属性:
scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。

根节点< configuration >的子节点:
< configuration >下面一共有2个属性,3个子节点,分别是:
属性一:设置上下文名称< contextName >
每个logger都关联到logger上下文,默认上下文名称为“default”。但可以使用< contextName >设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改,可以通过%contextName来打印日志上下文名称。
< contextName >logback< /contextName >
属性二:设置变量< property >
用来定义变量值的标签,< property > 有两个属性,name和value;其中name的值是变量的名称,value的值时变量定义的值。通过< property >定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。

<property name="log.path" value="./logs" />
子节点一<appender>

appender用来格式化日志输出节点,有俩个属性name和class,class用来指定哪种输出策略,常用就是控制台输出策略和文件输出策略。

2.4.2 控制台输出ConsoleAppender:
<!--输出到控制台-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!--过滤掉ERROR级别以下的日志-->
        <filter class="ch.qos.logback.classis.filter.ThresholdFilter" >
            <level>ERROR</level>
        </filter>
        <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
  • %d{HH: mm:ss.SSS}——日志输出时间
  • %thread——输出日志的进程名字,这在Web应用以及异步任务处理中很有用
  • %logger{36}——日志输出者的名字
  • %msg——日志消息
  • %n——平台的换行符
2.4.3 输出到文件RollingFileAppender

另一种常见的日志输出到文件,随着应用的运行时间越来越长,日志也会增长的越来越多,将他们输出到同一个文件并非一个好办法。RollingFileAppender用于切分文件日志:

<appender name="out2File" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--日志文件输出的文件名-->
        <file>${LOG_HOME_SERVICE}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--归并日志文件输出的文件名-->
            <fileNamePattern>${LOG_HOME_SERVICE}-%d{yyyy-MM-dd}.%i.log
            </fileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
            <!--文件最大1G-->
            <totalSizeCap>1GB</totalSizeCap>
            <!--归并日志文件最大大小-->
            <TimeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <MaxFileSize>100MB</MaxFileSize>
            </TimeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %msg%n</pattern>
        </encoder>
        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>
2.4.4 子节点二< 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="console" />
    </root>
2.4.5 子节点三< logger >

< logger >用来设置某一个包或者具体的某一个类的日志打印级别、以及指定< appender >。< logger >仅有一个name属性,一个可选的level和一个可选的addtivity属性。

  • name:用来指定受此loger约束的某一个包或者具体的某一个类。 l
  • evel:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL和OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。如果未设置此属性,那么当前loger将会继承上级的级别。
  • addtivity:是否向上级logger传递打印信息。默认是true。
2.6 多环境日志输出

据不同环境(prod:生产环境,test:测试环境,dev:开发环境)来定义不同的日志输出,在 logback-spring.xml中使用 springProfile 节点来定义,方法如下:
文件名称不是logback.xml,想使用spring扩展profile支持,要以logback-spring.xml命名

    <springProfile name="test, dev">
        <logger name="" level=""/>
    </springProfile>

    <springProfile name="prod">
        <logger name="" level=""/>
    </springProfile>

可以启动服务的时候指定 profile (如不指定使用默认),如指定prod 的方式为:
java -jar xxx.jar –spring.profiles.active=prod

至此logback基本配置以及如何与spring boot使用讲解完了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值