Spring Boot日志框架


Spring Boot支持Java Util Logging,Log4j2,Lockback作为日志框架,如果你使用starters启动器,Spring Boot将使用Logback作为默认日志框架。无论使用哪种日志框架,Spring Boot都支持配置将日志输出到控制台或者文件中。

spring-boot-starter启动器包含spring-boot-starter-logging启动器并集成了slf4j日志抽象及Logback日志框架。

属性配置日志


Spring Boot支持属性配置日志参数,这个不是很灵活,不细讲。

参考配置:

# LOGGING
logging.config= # Location of the logging configuration file. For instance `classpath:logback.xml` for Logback
logging.exception-conversion-word=%wEx # Conversion word used when logging exceptions.
logging.file= # Log file name. For instance `myapp.log`
logging.level.*= # Log levels severity mapping. For instance `logging.level.org.springframework=DEBUG`
logging.path= # Location of the log file. For instance `/var/log`
logging.pattern.console= # Appender pattern for output to the console. Only supported with the default logback setup.
logging.pattern.file= # Appender pattern for output to the file. Only supported with the default logback setup.
logging.pattern.level= # Appender pattern for log level (default %5p). Only supported with the default logback setup.
logging.register-shutdown-hook=false # Register a shutdown hook for the logging system when it is initialized.

如:

logging.level.root=DEBUG
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR

自定义日志文件


根据不同的日志框架,默认加载的日志配置文件的文件名,放在资源根目录下,其他的目录及文件名不能被加载。

Logging System Customization
Logback logback-spring.xml, logback-spring.groovy, logback.xml or logback.groovy
Log4j2 log4j2-spring.xml or log4j2.xml
JDK (Java Util Logging) logging.properties

既然默认自带了Logback框架,Logback也是最优秀的日志框架,在资源目录下创建一个logback-spring.xml即可,下面是一个参考配置文件。

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false"><springProperty scope="context" name="APP_NAME" source="spring.application.name"/><springProperty scope="context" name="APP_PORT" source="server.port"/><springProperty scope="context" name="DEFAULT_APP_PORT" source="spring.application.port"/><property name="OS_NAME" value="${os.name}"/><if condition='property("OS_NAME").contains("Windows")'><then><property name="LOG_PATH" value="${LOG_PATH:-E:/logs}" /></then><else><property name="LOG_PATH" value="${LOG_PATH:-/log}" /></else></if>      <property name="LOG_DIR" value="${APP_NAME:-system}" /><property name="APP_PORT" value="${APP_PORT:-${DEFAULT_APP_PORT:-0}}" /><if condition='!property("APP_PORT").equals("0")'><then><property name="LOG_DIR" value="${LOG_DIR}-${APP_PORT}" /></then></if><!-- 控制台输出 --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%msg:日志消息,%n是换行符 --><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern></encoder></appender><!-- 按照每天生成日志文件 --><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>INFO</level></filter><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--日志文件输出的文件名 --><FileNamePattern>${LOG_PATH}/${LOG_DIR}/info.log.%d{yyyy-MM-dd}.log</FileNamePattern><!--日志文件保留天数 --><MaxHistory>30</MaxHistory></rollingPolicy><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 --><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern></encoder><!--日志文件最大的大小 --><triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"><MaxFileSize>10MB</MaxFileSize></triggeringPolicy></appender><!-- 按照每天生成日志文件 error级别 --><appender name="FILE-ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter>  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--日志文件输出的文件名 --><FileNamePattern>${LOG_PATH}/${LOG_DIR}/error.log.%d{yyyy-MM-dd}.log</FileNamePattern><!--日志文件保留天数 --><MaxHistory>30</MaxHistory></rollingPolicy><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 --><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern></encoder><!--日志文件最大的大小 --><triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"><MaxFileSize>10MB</MaxFileSize></triggeringPolicy></appender><!--myibatis log configure --><logger name="com.apache.ibatis" level="TRACE" /><logger name="java.sql.Connection" level="DEBUG" /><logger name="java.sql.Statement" level="DEBUG" /><logger name="java.sql.PreparedStatement" level="DEBUG" /><!-- 日志输出级别 --><root level="INFO"><appender-ref ref="STDOUT" /><appender-ref ref="FILE" /><appender-ref ref="FILE-ERROR" /></root>
</configuration>

强烈推荐使用logback-spring.xml作为文件名,因为logback.xml加载太早。

日志初始化在ApplicationContext创建之前,所以@PropertySources加载的配置是读取不到的,系统环境变量、Spring Environment及application,bootstrap配置文件中的信息可以读取到。

读取系统环境属性:

<property name="LOG_PATH" value="${LOG_PATH:-E:/logs}" />

读取当前应用Environment中的属性:

<springProperty scope="context" name="fluentHost" source="myapp.fluentd.host" defaultValue="localhost"/>

Spring Boot也支持通过springProfile来加载不同profiles下的配置。

<springProfile name="staging"><!-- configuration to be enabled when the "staging" profile is active -->
</springProfile><springProfile name="dev, staging"><!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
</springProfile><springProfile name="!production"><!-- configuration to be enabled when the "production" profile is not active -->
</springProfile>

Spring Boot日志集成相关推荐

  1. Spring Boot 日志集成 Logging 入门

    摘要: 原创出处 http://www.iocoder.cn/Spring-Boot/Logging/ 「芋道源码」欢迎转载,保留摘要,谢谢! 1. 概述 2. 快速入门 3. 动态修改日志级别 4. ...

  2. 54. spring boot日志升级篇—logback【从零开始学Spring Boot】

    在<44. Spring Boot日志记录SLF4J>章节中有关相关的介绍,这里我们在深入的了解下logback框架. 为什么要使用logback ? --在开发中不建议使用System. ...

  3. springboot日志写入mysql_44. Spring Boot日志记录SLF4J【从零开始学Spring Boot】

    学院中有Spring Boot相关的课程!点击「阅读原文」进行查看! SpringSecurity5.0视频:http://t.cn/A6ZadMBe Sharding-JDBC分库分表实战: 在开发 ...

  4. Spring Boot 工程集成全局唯一ID生成器 Vesta

    2019独角兽企业重金招聘Python工程师标准>>> 本文内容脑图如下: 文章共 760字,阅读大约需要 2分钟 ! 概 述 在前一篇文章 <Spring Boot工程集成全 ...

  5. ELK 处理 Spring Boot 日志,妙!

    以下文章来源方志朋的博客,回复"666"获面试宝典 在排查线上异常的过程中,查询日志总是必不可缺的一部分.现今大多采用的微服务架构,日志被分散在不同的机器上,使得日志的查询变得异常 ...

  6. ELK 处理 Spring Boot 日志,有点强悍!

    在排查线上异常的过程中,查询日志总是必不可缺的一部分.现今大多采用的微服务架构,日志被分散在不同的机器上,使得日志的查询变得异常困难.工欲善其事,必先利其器.如果此时有一个统一的实时日志分析平台,那可 ...

  7. 让你的spring-boot应用日志随心所欲--spring boot日志深入分析

    1.spring boot日志概述 spring boot使用Commons Logging作为内部的日志系统,并且给Java Util Logging,Log4J2以及Logback都提供了默认的配 ...

  8. Spring Boot 日志管理

    在代码有问题的时候,很多人应该都是通过 debug 的方式去排查,往往忽略了日志的重要性. 好的日志管理可以快速定位问题出现的位置,也可以提高代码的阅读性.这篇博文主要介绍一下 Spring Boot ...

  9. 在spring boot中集成Swagger

    Swagger 在spring boot中集成Swagger 新建一个swagger项目 maven依赖 <!-- https://mvnrepository.com/artifact/io.s ...

最新文章

  1. 大型网站技术架构(八)网站的安全架构
  2. 32位地址的寻址方式
  3. 电脑删除linux系统,我的电脑现在装有XP和Linux两个系统,现在想删除Linux系统,开机不用选直接进入XP。不知怎么做??...
  4. JQuery弹出层,点击按钮后弹出遮罩层,有关闭按钮
  5. 解决Spring Boot报错Mapped Statements collection already contains value for...Error while adding the mapp
  6. mongo数据库和mysql数据库的区别_Mongodb与mysql数据库的区别
  7. Codeforces Round #757 (Div. 2)ABCD1
  8. 前端模块化概念及规范之一commonjs
  9. 高中信息技术python及答案_(完整)高中信息技术《Python语言》模块试卷
  10. 运放专题:电压电流转换
  11. 今日头条文章评论内容爬取
  12. 笔记本电脑怎么用u盘重装系统,u盘给电脑安装系统的方法
  13. 学而思的python课怎么样_学而思老师怎么样?上课效果好吗?
  14. 《Linux内核 学习笔记》--- 第二章 内存管理 2.9 mmap
  15. 内行人看笑话 外行人一脸懵逼
  16. 1.3双摇杆遥控器电路部分--基本外设电路(ST-link下载、串口、按键、摇杆、电量检测、LED指示灯、0.96寸OLED、NRF24L01)
  17. Latex 制作斜线表头、合并行列单元格
  18. html中对复选框验证,验证HTML中的复选框
  19. matlab中复合中点式程序,《现代数值计算》Matlab程序整理(23页)-原创力文档
  20. java即时消息推送

热门文章

  1. 一道比较实用的MySQL面试题:游戏数据充值查询
  2. Java对MySQL数据库进行连接、查询和修改【转载】
  3. EXCEL基本操作(一~二)
  4. 百度新key申请步骤
  5. ERROR 1045: Access denied for user: 'root@localhost' (Using password: YES)(转)
  6. 使用Data::Dumper
  7. VMware Resource Pool Recommendations
  8. APP-V与RemotoAPP
  9. 如何用Matlab求矩阵的秩、乘积、逆、行列式的值、转置
  10. 基于python实现opencv视频去抖动