当前位置: 首页 > news >正文

SpringBoot 日志框架

默认的日志框架 logback

SpringBoot使用Logback作为默认的日志框架。logback 是log4j框架的作者开发的新一代日志框架,它效率更高、能够适应诸多的运行环境,同时天然支持SLF4J。spring-boot-starter 其中包含了 spring-boot-starter-logging,该依赖内容就是 Spring Boot 默认的日志框架 logback。

默认logback日志打印效果图

从上图可以看到,日志输出内容元素如下

  • 时间日期 :精确到毫秒
  • 日志级别 :ERROR, WARN, INFO, DEBUG or TRACE
  • 进程ID
  • 分隔符 :--- 标识实际日志的开始
  • 线程名 :方括号括起来(可能会截断控制台输出
  • Logger名 :通常使用源代码的类名

logback 基本配置

Spting-Boot 默认集成的 logback 虽然打印些日志信息,但是不够友好。满足不了我们日常开发需求。因此,我们可以在根目录下创建 logback.xml 或 logback-spring.xml (建议命名)文件,进行自定义配置(In a Spring Boot application, you can specify a Logback XML configuration file as logback.xml or logback-spring.xml in the project classpath. The Spring Boot team however recommends using the -spring variant for your logging configuration, logback-spring.xml is preferred over logback.xml. If you use the standard logback.xml configuration, Spring Boot may not be able to completely control log initialization.)
<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <!-- 控制台输出  start -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder charset="UTF-8">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <!-- 控制台输出  end -->

    <!-- 文件日志输出  start -->
    <appender name="INFO"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>D://logs/demo_info.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>D://logs/demo_info.%d{yyyy-MM-dd}-%i.log</fileNamePattern>
            <maxHistory>30</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <MaxFileSize>50MB</MaxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <!-- 文件日志输出  end -->

    <!-- 异常日志输出  start -->
    <appender name="ERROR"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>D://logs/demo_error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>D://logs/demo_error.%d{yyyy-MM-dd}-%i.log</fileNamePattern>
            <maxHistory>30</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <MaxFileSize>50MB</MaxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} #### %msg%n</pattern>
        </encoder>
    </appender>
    <!-- 异常日志输出  end -->

    <!--打印info级别的日志,注意,additivity必须是false-->
    <logger name="monitorLog" level="info" additivity="false">
        <appender-ref ref="INFO" />
    </logger>

    <!--打印异常错误日志,注意,additivity必须是false-->
    <logger name="errorLog" level="error" additivity="false">
        <appender-ref ref="ERROR" />
    </logger>

    <!--还可以根据业务需要配置其他的logger-->
    <!--实际项目中我们通常将不同的日志打印到不同的日志文件中-->

    <root level="debug">
        <appender-ref ref="STDOUT" />
    </root>

</configuration>

日志级别

默认情况下,Spring Boot 配置 ERROR, WARN, INFO 三种日志级别。如果需要 Debug 级别的日志。在 src/main/resources/application.properties 中配置数据源信息。

debug=true

此外,配置 logging.level.* 来具体输出哪些包的日志级别。

logging.level.root=INFO
logging.level.org.springframework.web=DEBUG

日志文件

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

logging.path = /var/tmp
logging.file = xxx.log
logging.level.root = info

如果只配置 logging.path,在 /var/tmp文件夹生成一个日志文件为 spring.log。如果只配置 logging.file,会在项目的当前路径下生成一个 xxx.log 日志文件。

值得注意的是,日志文件会在 10MB 大小的时候被截断,产生新的日志文件 

常用的日志框架 log4j

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

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j</artifactId>
</dependency>

或者

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

log4j 依赖模块加到 Maven 依赖中后,在 src/main/resources 目录下加入 log4j-spring.properties 配置文件。Spring Boot 官方推荐优先使用带有 –spring 的文件名作为你的日志配置, 例如 log4j-spring.properties,当然使用 log4j.properties 也是支持的。

相关文章:

  • Expression.Bind()方法的应用
  • python基础----特性(property)、静态方法(staticmethod)、类方法(classmethod)、__str__的用法...
  • Extjs 4 grid中的checkbox的加载时预选中【默认选中】
  • java: -source 1.6 中不支持 switch 中存在字符串.....
  • Python中大名鼎鼎的face_recognition使用
  • Spark 触发Job提交
  • 【bzoj1013】[JSOI2008]球形空间产生器sphere
  • 与众不同 windows phone (44) - 8.0 位置和地图
  • 小程序开发之获取小程序二维码
  • Android Contextual Menus之二:contextual action mode
  • 基本类型和引用类型的值 动态的属性
  • JVM启动参数小结
  • java B2B2C源码电子商务平台 -----客户端负载均衡策略
  • 八年技术加持,性能提升10倍,阿里云HBase 2.0首发商用
  • 构建基于WCF Restful Service的服务
  • [译] React v16.8: 含有Hooks的版本
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • AngularJS指令开发(1)——参数详解
  • C++11: atomic 头文件
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • CSS魔法堂:Absolute Positioning就这个样
  • Git同步原始仓库到Fork仓库中
  • Gradle 5.0 正式版发布
  • java8 Stream Pipelines 浅析
  • Java读取Properties文件的六种方法
  • leetcode46 Permutation 排列组合
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • Terraform入门 - 3. 变更基础设施
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • webpack入门学习手记(二)
  • 半理解系列--Promise的进化史
  • 动态魔术使用DBMS_SQL
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • ​虚拟化系列介绍(十)
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (done) 两个矩阵 “相似” 是什么意思?
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • .NET CLR基本术语
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .net 程序发生了一个不可捕获的异常
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET程序员迈向卓越的必由之路
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • @RequestBody与@ResponseBody的使用
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku