logback控制台彩色日志输出

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: logback控制台彩色日志输出

一、logback控制台常规日志输出


1、常规配置

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!-- 输出模板 -->
    <encoder>
      <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
    </encoder>
  </appender>
  <root level="DEBUG">
    <appender-ref ref="STDOUT" />
  </root>
  </configuration>


2、控制台常规日志输出

控制台常规日志输出,朴朴素素平淡无奇,各level级别的日志不能直观的区分开:



二、logback控制台彩色日志输出


1、彩色配置

在spring boot下可以通过引用org/springframework/boot/logging/logback/defaults.xml文件中,配置的默认控制台日志输出模板CONSOLE_LOG_PATTERN。

里面默认采用的就是彩色日志输出。

<configuration>
  <!-- 引入spirng boot默认的logback配置文件 -->
  <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!-- 采用Spring boot中默认的控制台彩色日志输出模板 -->
    <encoder>
      <pattern>${CONSOLE_LOG_PATTERN}</pattern>
    </encoder>
  </appender>
  <root level="DEBUG">
    <appender-ref ref="STDOUT" />
  </root>
  </configuration>


2、控制台彩色日志输出

各级别的日志通过不同的色彩清晰的标注出来,看起来更直观舒服。

104.png

当然,也可以自定义控制台彩色输出模板。

<configuration>
  <!-- 也可以自定义控制台输出模板 -->
  <property name="CONSOLE_LOG_PATTERN" value="${%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!-- 引用自定义输出模板 -->
    <encoder>
      <pattern>${CONSOLE_LOG_PATTERN}</pattern>
    </encoder>
  </appender>
  <root level="DEBUG">
    <appender-ref ref="STDOUT" />
  </root>
  </configuration>


三、彩色日志输出开关


在spring boot中,我们还可以通过属性配置控制是否启用彩色日志输出。


application.properties中设置:

# 检查终端是否支持ANSI,是的话就采用彩色输出
spring.output.ansi.enabled=detect


说明:

spring boot项目中spring.output.ansi.enabled属性的默认值为detect,能满足大多数场景,不推荐修改为其他值。


注意⚠️:

经测试,在idea中启动spring boot的工程,会默认在启动参数中添加-Dspring.output.ansi.enabled=always,强制启用彩色输出。

导致无论是在application.properties中、还是在VM options中重新指定的spring.output.ansi.enabled参数始终无效。


spring.output.ansi.enabled参数可选值介绍:

public static enum Enabled {
    DETECT,
    ALWAYS,
    NEVER;
    private Enabled() {
    }
}

DETECT 检查终端是否支持ANSI,是的话就采用彩色输出

ALWAYS 不检查,总是彩色输出

NEVER 禁用彩色输出


四、严禁日志文件中采用彩色日志输出


<configuration>
  <!-- 引入spirng boot默认的logback配置文件 -->
  <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>testFile.log</file>
    <append>true</append>
    <immediateFlush>true</immediateFlush>
    <encoder>
     <!-- 严禁FileAppender采用彩色日志输出 -->
      <pattern>${CONSOLE_LOG_PATTERN}</pattern>
    </encoder>
  </appender>
  <root level="DEBUG">
    <appender-ref ref="FILE" />
  </root>
</configuration>



生成的日志文件中的内容:

103.png

用于颜色渲染的内容全部变成了乱码字符,严重影响了日志内容的查看,也增加了日志输出的压力。


五、解读spring boot和logback集成


在org.springframework.boot.logging.logback目录下,集成了logback的默认配置相关文件。

102.png

这里重点对4个xml配置文件进行介绍:


base.xml 基础配置模板

defaults.xml 默认配置属性

file-appender.xml RollingFileAppender模板

console-appender.xml ConsoleAppender模板

4个文件都是included文件,即被引用文件,单独是不会起作用的。

可以在项目中的logback.xml的配置文件中通过include标签根据需要去引用。


base.xml 内容如下:

<included>
  <include resource="org/springframework/boot/logging/logback/defaults.xml" />
  <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>
  <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
  <include resource="org/springframework/boot/logging/logback/file-appender.xml" />
  <root level="INFO">
  <appender-ref ref="CONSOLE" />
  <appender-ref ref="FILE" />
  </root>
</included>


file-appender.xml文件内容:

<included>
  <appender name="FILE"
  class="ch.qos.logback.core.rolling.RollingFileAppender">
  <encoder>
    <pattern>${FILE_LOG_PATTERN}</pattern>
  </encoder>
  <file>${LOG_FILE}</file>
  <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
    <cleanHistoryOnStart>${LOG_FILE_CLEAN_HISTORY_ON_START:-false}</cleanHistoryOnStart>
    <fileNamePattern>${ROLLING_FILE_NAME_PATTERN:-${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz}</fileNamePattern>
    <maxFileSize>${LOG_FILE_MAX_SIZE:-10MB}</maxFileSize>
    <maxHistory>${LOG_FILE_MAX_HISTORY:-7}</maxHistory>
    <totalSizeCap>${LOG_FILE_TOTAL_SIZE_CAP:-0}</totalSizeCap>
  </rollingPolicy>
  </appender>
</included>


总结


1、介绍了如何使用logback在控制台输出彩色日志。

2、严禁将彩色日志输出到日志文件中。

3、可以根据需要引用spring boot中logback的引用文件defaults.xml,console-appender.xml,简化配置。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
1月前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
212 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
28天前
|
Java 中间件
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
70 5
|
2月前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
271 3
|
2月前
|
存储 Java Android开发
Android|记一个导致 logback 无法输出日志的问题
在给一个 Android 项目添加 logback 日志框架时,遇到一个导致无法正常输出日志的问题,这里记录一下。
38 2
|
2月前
|
Java 程序员 API
Android|集成 slf4j + logback 作为日志框架
做个简单改造,统一 Android APP 和 Java 后端项目打印日志的体验。
112 1
|
4月前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之配置Logback以仅记录错误级别的日志到一个滚动文件中的问题如何解决
Java应用结构规范问题之配置Logback以仅记录错误级别的日志到一个滚动文件中的问题如何解决
|
4月前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之配置Logback以在控制台输出日志的问题如何解决
Java应用结构规范问题之配置Logback以在控制台输出日志的问题如何解决
|
4月前
|
XML Java API
Java日志通关(四) - Logback 介绍
作者日常在与其他同学合作时,经常发现不合理的日志配置以及五花八门的日志记录方式,后续作者打算在团队内做一次Java日志的分享,本文是整理出的系列文章第四篇。
|
4月前
|
JavaScript Java API
Java日志通关(二) - Slf4j+Logback 整合及排包
作者日常在与其他同学合作时,经常发现不合理的日志配置以及五花八门的日志记录方式,后续作者打算在团队内做一次Java日志的分享,本文是整理出的系列文章第二篇。
|
4月前
|
XML Java Maven
logback在springBoot项目中的使用 springboot中使用日志进行持久化保存日志信息
这篇文章详细介绍了如何在Spring Boot项目中使用logback进行日志记录,包括Maven依赖配置、logback配置文件的编写,以及实现的日志持久化和控制台输出效果。
logback在springBoot项目中的使用 springboot中使用日志进行持久化保存日志信息