spring boot配置logback日志


在上一篇spring boot入门里提过,Spring Boot默认的日志打印是logback,所以配置logback日志会很简单,但是也有注意的地方。

本次配置日志的需求

  1. 日志需要控制台打印和文件打印两种。
  2. 其中文件打印按照日志级别分别保存到各自的文件里。
  3. 文件日志每天一个日志,并且保存30天。
  4. 文件日志可以自由指定保存路径、打印格式等。
  5. 控制台打印可指定打印格式,并且自由增加删除某些日志。

通过上一篇的介绍,知道,Spring boot默认日志为logback,所以只要引入如下依赖,就会自动引入logback日志的jar包。

<!-- Spring Boot Web 依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

单独spring 项目使用 logback日志需要的jar包如下:

<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.1.9</version>
</dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>1.1.9</version>
</dependency>
<!--因logback日志需要与slf4j配合使用,如下的jar包需要引入-->
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.22</version>
</dependency>1234567891011121314151617

再说一遍,spring boot项目不需要引入上边的三个jar包,已经自动引入了。

以下是配置步骤:

  • logback日志的在spring boot里的配置需要在src/main/resources下,application.properties同级,放一个logback的xml文件,一般起名字为logback-spring.xml,网上很多人建议起名字为这个,我没看出有什么区别,所以我就按照他们讲的配置了,以免出现不必要的错误。
  • logback-spring.xml按照我的需求配置成控制台打印和文件打印,直接将以下内容复制,并命名成该名字,放到上边说的位置中,具体的内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds">  <!-- 都说spring boot使用日志需要引入这个,但是我引入了之后总是打印两份日志,所以我去除了,并不影响使用 --><!-- <include resource="org/springframework/boot/logging/logback/base.xml"/> --><!-- 控制台设置 -->  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">  <encoder>  <pattern>${CONSOLE_LOG_PATTERN}</pattern>  </encoder>  </appender>  <!-- INFO -->  <appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">  <!-- 文件路径 ,注意LOG_PATH是默认值,它的配置对应application.properties里的logging.path值-->  <file>${LOG_PATH}/info/info.log</file>  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  <!-- 文件名称 -->  <fileNamePattern>info/info-%d{yyyy-MM-dd}.log  </fileNamePattern>  <!-- 文件最大保存历史数量 -->  <MaxHistory>30</MaxHistory>  </rollingPolicy>  <encoder>  <pattern>${FILE_LOG_PATTERN}</pattern>  </encoder>  <filter class="ch.qos.logback.classic.filter.LevelFilter">  <level>INFO</level>  <onMatch>ACCEPT</onMatch>    <onMismatch>DENY</onMismatch>    </filter>  </appender><!-- DEBUG -->  <appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">  <!-- 文件路径 ,注意LOG_PATH是默认值,它的配置对应application.properties里的logging.path值-->  <file>${LOG_PATH}/debug/debug.log</file>  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  <!-- 文件名称 -->  <fileNamePattern>debug/debug-%d{yyyy-MM-dd}.log</fileNamePattern>  <!-- 文件最大保存历史数量 -->  <MaxHistory>30</MaxHistory>  </rollingPolicy>  <encoder>  <pattern>${FILE_LOG_PATTERN}</pattern>  </encoder>  <filter class="ch.qos.logback.classic.filter.LevelFilter">  <level>DEBUG</level>  <onMatch>ACCEPT</onMatch>    <onMismatch>DENY</onMismatch>    </filter>  </appender> <!-- WARN -->  <appender name="warnAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">  <!-- 文件路径 ,注意LOG_PATH是默认值,它的配置对应application.properties里的logging.path值-->   <file>${LOG_PATH}/warn/warn.log</file>  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  <!-- 文件名称 -->  <fileNamePattern>warn/warn-%d{yyyy-MM-dd}.log  </fileNamePattern>  <!-- 文件最大保存历史数量 -->  <MaxHistory>30</MaxHistory>  </rollingPolicy>  <encoder>  <pattern>${FILE_LOG_PATTERN}</pattern>  </encoder>  <filter class="ch.qos.logback.classic.filter.LevelFilter">  <level>WARN</level>  <onMatch>ACCEPT</onMatch>    <onMismatch>DENY</onMismatch>    </filter>  </appender> <!-- ERROR -->  <appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">  <!-- 文件路径 ,注意LOG_PATH是默认值,它的配置对应application.properties里的logging.path值-->  <file>${LOG_PATH}/error/error.log</file>  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  <!-- 文件名称 -->  <fileNamePattern>error/error-%d{yyyy-MM-dd}.log  </fileNamePattern>  <!-- 文件最大保存历史数量 -->  <MaxHistory>30</MaxHistory>  </rollingPolicy>  <encoder>  <pattern>${FILE_LOG_PATTERN}</pattern>  </encoder>  <filter class="ch.qos.logback.classic.filter.LevelFilter">  <level>ERROR</level>  <onMatch>ACCEPT</onMatch>    <onMismatch>DENY</onMismatch>    </filter>  </appender><logger name="org.springframework" additivity="false"><level value="ERROR" /><appender-ref ref="STDOUT" /><appender-ref ref="errorAppender" /></logger><!-- 由于启动的时候,以下两个包下打印debug级别日志很多 ,所以调到ERROR--><logger name="org.apache.tomcat.util" additivity="false"><level value="ERROR"/><appender-ref ref="STDOUT"/><appender-ref ref="errorAppender"/></logger><!-- 默认spring boot导入hibernate很多的依赖包,启动的时候,会有hibernate相关的内容,直接去除 --><logger name="org.hibernate.validator" additivity="false"><level value="ERROR"/><appender-ref ref="STDOUT"/><appender-ref ref="errorAppender"/></logger><root level="DEBUG"><appender-ref ref="STDOUT"/>  <appender-ref ref="infoAppender"/><appender-ref ref="debugAppender"/><appender-ref ref="warnAppender"/><appender-ref ref="errorAppender"/></root>
</configuration>

其中,你们应该注意到里边有很多的“${}”形式的变量这其实是logback日志的默认名称,比如${LOG_PATH},${CONSOLE_LOG_PATTERN},${FILE_LOG_PATTERN} 等,这些变量只需要在spring boot的默认配置文件,application.properties里添加如下配置即可:

1)以下是日志输出的位置,注意在logback-spring.xml里用LOG_PATH才能获取到值

logging.path=d:/logs/springBoot

2)以下是指向日志配置文件的位置

logging.config=classpath:logback-spring.xml

3)以下是控制台打印日志格式设置,注意在logback-spring.xml里用CONSOLE_LOG_PATTERN才能获取

logging.pattern.console=[%d{yyyy-MM-dd HH:mm:ss}] -- [%-5p]: [%c] -- %m%n

4)以下是文件打印日志格式设置,注意在logback-spring.xml里用FILE_LOG_PATTERN才能获取到

logging.pattern.file=[%d{yyyy-MM-dd HH:mm:ss}] -- [%-5p]: [%c] -- %m%n

添加上边四个配置就对日志配置完了。多说一句,为什么在application.properties文件里的日志配置名字和${} 里不同呢,这就需要看logback-spring.xml里最上边的base.xml引入,找到这个文件就明白了。它的位置在以下jar包里:

spring-boot-1.5.1.RELEASE.jar

找到如下位置:

org.springframework.boot.logging.logback

就会看到里边有base.xml、console-appender.xml等等四个xml文件,打开file.appender.xml如下:

也就是说spring boot里的日志配置文件已经将其写死,但是在application.properties里又要按照其要求写,所以我感觉这也是spring boot的缺点,太多隐藏的配置了,如果知道,那很简单了,但是不知道,就会浪费很多的时间,多配置很多的无用东西。

通过这四个spring boot的日志xml文件,也应该知道为什么在上一篇入门spring boot里没有配置日志,却打印日志的原因,其内在自己的日志应该就是这个。

另外说一下日志的打印控制,比如有一些打印日志我不想要,就可以通过配置logback-spring.xml文件,添加一个logger标签即可。比如如下:

[2021-06-05 19:14:23] -- [INFO ]: [org.I0Itec.zkclient.ZkClient] -- zookeeper state changed (SyncConnected)
[2021-06-05 19:14:23] -- [DEBUG]: [org.I0Itec.zkclient.ZkClient] -- Leaving process event
[2021-06-05 19:14:23] -- [DEBUG]: [org.I0Itec.zkclient.ZkClient] -- State is SyncConnected123

以上三条日志我现在不需要让它打印了,那就需要额外配置了,因为它们来自于org.I0Itec.zkclient.ZkClient 类,并且打印的内容分别是DEBUG和INFO级别,日志打印只要将该类的日志打印级别调高(日志从低到高为 TRACE、DEBUG、INFO、WARN、ERROR),因此只要将该类的日志级别配置为WARN以上,就不会打印上边的内容了。配置方法如下:

 <logger name="org.I0Itec.zkclient.ZkClient" additivity="false"><level value="ERROR" /><appender-ref ref="STDOUT" /><appender-ref ref="errorAppender" />
</logger>

其中:

name表示日志的打印位置,从上边可以看出是来自该类
additivity设置为false表示该日志打印设置(控制台打印还是文件打印等具体设置)不会向根root标签传递,也就是说该logger里怎么设置的那就会怎么打印,跟root无关
level value=’error’表示将该类日志级别设置为error级才会打印。
最后两行表示error级时会打印控制台和error文件同时打印日志。

配置logback日志的注意点:

  1. logback和log4j最好不要放在一起,会冲突,最主要的jar包是slf4j-log4j12.jarlogback-classic.jar 这两个jar包的设计简直是反人类,有一个类,这两个都会有,只要这两个jar包同时引入,就会看到启动spring boot会有一串冲突的红字,因此,只要用logback日志,就需要特别注意除了排除log4j主要jar包,别忘了排除slf4j-log4j12.jar ,具体的排除方法,可以选择maven项目的pom.xml,在右边找到Dependency Hierarchy,然后找到要排除的jar包,右击选择Exclude Maven Artifact,然后保存即可。

  2. logback的logback-spring.xml文件如果你没有按照我这么写,在application.properties文件里就不需要配置全部的4行内容,如果直接复制的我的,那就需要配置上了。

  3. logback貌似没有log4j常用,很多的第三方jar包都使用的log4j,比如aliba的dubbo和zookeeper都是默认的log4j,所以你在引入第三方的jar时,又使用的是logback,就特别注意是不是它们默认使用的log4j,如果是的话,有slf4j-log4j12.jar 就排除即可。后边说spring boot+dubbo时会再说。

spring boot配置logback日志相关推荐

  1. Spring boot配置logback日志打印到指定路径文件

    在实际项目开发中,一般都是使用log打印日志到指定路径,生成文件,而平时使用的System.out.pring()只能输出日志到控制台. 当我们把项目打成war包部署到服务器上,会有不用的用户使用我们 ...

  2. spring boot 配置logback,logback不打印日志

    spring boot 日志简介 spring boot只依赖 Commons Logging API,而不依赖其他日志(jul.logback.log4j).要想使用logback,必须引入jcl- ...

  3. 基于Spring Boot的Logback日志轮转配置

    在生产环境下,日志是最好的问题调试和跟踪方法,因此日志的地位是十分重要的.我们平时经常使用的log4j,slf4j,logback等等,他们的配置上大同小异.这里就结合Spring Boot配置一下L ...

  4. spring boot—自定义logback日志配置

    自定义日志配置 spring boot2.2.4官方文档 logback中文文档    1)spring boot可以适应所有日志框架,只需在类路径下包含相应的依赖来激活各种日志系统.    2)sp ...

  5. logback property 默认值_看完这篇文章还不会给spring boot配置logback,请你吃瓜

    每一个成功人士的背后,必定曾经做出过勇敢而又孤独的决定. 放弃不难,但坚持很酷~ 一.logback日志框架 logback 是一个开源的日志组件,由三个部分组成:logback-core,logba ...

  6. spring boot中的日志入门

    日志通常不会在需求阶段作为一个功能单独提出来,也不会在产品方案中看到它的细节.但是,这丝毫不影响它在任何一个系统中的重要地位. 报警系统与日志系统的关系 为了保证服务的高可用,发现问题一定要及时,定位 ...

  7. logback redis_使用Spring Boot和Logback登录到Redis

    logback redis 在进行集中式日志记录时,例如使用Elasticsearch,Logstash和Kibana或Graylog2,您可以为Java应用程序提供多个选项. 您既可以编写标准的应用 ...

  8. 使用Spring Boot和Logback登录到Redis

    在进行集中式日志记录时,例如使用Elasticsearch,Logstash和Kibana或Graylog2,您可以为Java应用程序提供几个选项. 您既可以编写标准的应用程序日志,也可以使用Logs ...

  9. spring boot配置dubbo(XML)

    上一篇写的是spring boot在自己的properties配置文件中简单配置dubbo的步骤,那种配置有很多的功能(比如超时时间.是否检查)等等,配置起来也挺麻烦的,而我们也习惯传统的那种XML形 ...

最新文章

  1. 计算机硬件的作用论文,计算机硬件的作用论文.doc
  2. BZOJ 2535:NOI 2010 航空管制
  3. Python os和os.path的基础知识与常用操作
  4. win7蓝屏_Win7大面积蓝屏?急!解决办法在这儿~
  5. CVPR 2019 | 旷视研究院提出Re-ID新方法VPM,优化局部成像下行人再识别
  6. 对PASCAL VOC 数据集进行数据增强
  7. 超炫的iphone应用UI/UX设计赏析
  8. 阿里云PolarDB发布重大更新 支持Oracle等数据库一键迁移上云
  9. 单纯形法求解函数极值问题 matlab代码
  10. xpath 取标签下所有文字内容_如何理解葡萄酒标签上的所有内容(下)
  11. 注解@Component,@Controller,@Service,@Repository简单了解
  12. flask html 得到文本框 input的内容_Python的Web框架Flask + Vue 生成漂亮的词云
  13. 决策树算法原理——cart
  14. win10 ping网络计算机,win10 ping命令:如何ping网速和ping各个参数命令解释
  15. nx.adjacency_matrix(G).todense()计算邻接矩阵与真实结果不一致
  16. 瑞吉外卖项目流程-准备阶段
  17. Win32_CDROMDrive 光驱 的参数说明
  18. 如何搜集你想要的信息
  19. 【python】pyi文件
  20. 可显示在桌面上的备忘录,电脑桌面备忘录软件下载

热门文章

  1. JavaScript | 用户定义函数的一些示例
  2. Java ByteArrayInputStream markSupported()方法与示例
  3. 计算机选配 注意事项,选择鼠标注意事项有哪些
  4. Linux中常用的命令
  5. python文本词频统计是什么_python 大批量文本分词 以及词频统计 (高效处理案例)...
  6. java光标位置无效_ResultSet.getString(1)引发java.sql.SQLException:当前光标位置的无效操作...
  7. hashmap clone_Java HashMap clone()方法与示例
  8. Java Formatter format()方法及示例
  9. Python 爬取淘宝商品信息栏目
  10. 面试官:AtomicInteger是如何保证线程安全?