前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >『互联网架构』软件架构-Spring boot集成日志框架(89)

『互联网架构』软件架构-Spring boot集成日志框架(89)

作者头像
IT架构圈
发布2019-06-25 12:18:15
4030
发布2019-06-25 12:18:15
举报
文章被收录于专栏:IT架构圈IT架构圈

Java 有很多日志系统,例如,Java Util Logging, Log4J, Log4J2, Logback 等。Spring Boot 也提供了不同的选项,比如日志框架可以用 logback 或 log4j ,log4j2等。

日志系统

springboot自带log日志功能 使用的是slf4j(Simple Logging Facade For Java),它是一个针对于各类Java日志框架的统一Facade抽象。Logback是log4j框架的作者开发的新一代日志框架,它效率更高、能够适应诸多的运行环境,同时天然支持SLF4J。这是默认支持logback的原因。日志实现默认使用的logback。

在spring-boot-starter 依赖中,添加了 spring-boot-starter-logging依赖

代码语言:javascript
复制
<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-logging</artifactId></dependency>

那么, Spring Boot 应用将自动使用 logback 作为应用日志框架, Spring Boot 启动的时候,由 org.springframework.boot.logging.Logging.LoggingApplicationListener 根据情况初始化并使用。值得注意的是,默认情况下,Spring Boot 使用 logback 作为应用日志框架。因为 spring-boot-starter 其中包含了 spring-boot-starter-logging,该依赖就是 使用Spring Boot 默认的日志框架 logback。

程序中使用

代码语言:javascript
复制
import org.slf4j.Logger;import org.slf4j.LoggerFactory;private final Logger logger = LoggerFactory.getLogger(SampleController.class);
  • 日志级别

默认情况下,Spring Boot 配置的是INFO 日志级别,也就是会输出INFO级别以上的日志( ERROR, WARN, INFO )。如果需要 Debug 级别的日志。在 src/main/resources/application.properties 中配置。debug=true此外,配置 logging.level.* 来具体输出哪些包的日志级别。

代码语言:javascript
复制
logging.level.root=INFOlogging.level.org.springframework.web=DEBUGlogging.level.com.idig8.boot.controller=DEBUG
  • 日志文件

默认情况下, Spring Boot 日志只会输出到控制台,并不会写入到日志文件,因此,对于正式环境的应用,我们需要通过在 application.properites 文件中配置 logging.file 文件名称和 logging.path 文件路径,将日志输出到日志文件中。

代码语言:javascript
复制
logging.path = /var/tmplogging.file = xxx.loglogging.level.root = info

如果只配置 logging.path,在 /var/tmp文件夹生成一个日志文件为 spring.log。如果只配置 logging.file,会在项目的当前路径下生成一个 xxx.log 日志文件。值得注意的是,日志文件会在 10MB 大小的时候被截断,产生新的日志文件。

  • 常用的日志框架 log4j

我们希望使用 log4j 或者 log4j2,我们可以采用类似的方式将它们对应的依赖模块加到 Maven 依赖中。

1.集成log4j2

在spring-boot-dependencies POMs中搜索spring-boot-starter-log4j2 发现Spring boot父Pom中自己提供了这个依赖,于是我们加入如下jar依赖:

代码语言:javascript
复制
<!-- log4j2 --><dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter</artifactId>    <exclusions>        <exclusion>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-logging</artifactId>        </exclusion>    </exclusions></dependency><dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-log4j2</artifactId></dependency>

2.集成log4j

在spring-boot-dependencies POMs中搜索spring-boot-starter-log4j 发现Spring boot的父Poms中自己并没有提供了这个依赖, 我们在http://mvnrepository.com中央仓库中查找spring-boot-starter-log4j。 加入pom依赖

代码语言:javascript
复制
<!-- log4j start --><dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter</artifactId>            <exclusions>                <exclusion>                    <groupId>org.springframework.boot</groupId>                    <artifactId>spring-boot-starter-logging</artifactId>                </exclusion>            </exclusions>        </dependency><dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-log4j</artifactId>    <version>1.3.8.RELEASE</version></dependency><!-- log4j end -->

classpath下增加log4j.properties

代码语言:javascript
复制
log4j.rootCategory=INFO, stdout, file, errorfilelog4j.category.com.example.boot=INFO, myFilelog4j.logger.error=errorfile
# 控制台输出log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n
# root日志输出log4j.appender.file=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.file.file=logs/all.loglog4j.appender.file.DatePattern='.'yyyy-MM-ddlog4j.appender.file.layout=org.apache.log4j.PatternLayoutlog4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n
# error日志输出log4j.appender.errorfile=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.errorfile.file=logs/error.loglog4j.appender.errorfile.DatePattern='.'yyyy-MM-ddlog4j.appender.errorfile.Threshold = ERRORlog4j.appender.errorfile.layout=org.apache.log4j.PatternLayoutlog4j.appender.errorfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n
# com.example.boot下的日志输出log4j.appender.myFile=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.myFile.file=logs/my.loglog4j.appender.myFile.DatePattern='.'yyyy-MM-ddlog4j.appender.myFile.layout=org.apache.log4j.PatternLayoutlog4j.appender.myFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L ---- %m%n

代码中使用log4j

代码语言:javascript
复制
import org.apache.log4j.Logger;private final Logger logger = Logger.getLogger(xxx.class);

PS:springBoot这几次根本不说原理的,在企业级里面最重要的还是应用。就直说的配置和应用相关的。只有应用起来才可以进行深度的分析。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程坑太多 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 日志系统
相关产品与服务
日志服务
日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档