谈谈 Log 的定义以及使用 - part1

Spring Boot 内部所有日志记录是使用 Commons Logging 实现,同时默认配置也提供了 Java Util LoggingLog4JLog4J2Logback 的支援。在每种情况下,已预先配置为使用控制台输出,同时提供档案输出方式。

预设情况下,如果使用Starters,则使用 Logback 进行日志记录。

日志格式

日志格式

2019-03-05 10:57:51.112  INFO 45469 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/7.0.52
2019-03-05 10:57:51.253  INFO 45469 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-03-05 10:57:51.253  INFO 45469 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1358 ms
2019-03-05 10:57:51.698  INFO 45469 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [/]
2019-03-05 10:57:51.702  INFO 45469 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]

{Date and Time} {Log Level} {Process ID} {---} {Thread name} {Logger name} { log message}

--- 表示日志的开始

Logback does not have a FATAL level. It is mapped to ERROR.

%logger{length} 表示如果讯息长度大於给定的 length 的值,保留最右边的单词,左边的每个单词只保留第一个字符。

日志讯息对齐与控制

模式 描述
%50logger 靠右对齐,最小宽度为 50,若不足 50 则左补空格,长度超出 50 则原样输出
%-50logger - 表示向左对齐
%.20logger 靠左对齐,最大的宽度为 20,若长度超出 20,将左边多出的字符直接移除
%30.50logger 最小宽度为 30,若长度不足 30 则左补空格靠右对齐;若长度大於 30 且不足 50 则靠左对齐;若长度大於 50 则将左边多出的字符直接移除

日志级别

  • Trace
  • DEBUG
    • 开发阶段使用,验证功能是否正确
  • INFO
    • 开发阶段使用,验证开发功能或 bug 是否修正
  • WARING
    • 部会对系统造成影响的非正常流程
  • ERROR
    • 对系统造成影响的非正常流程,可自我修复,不影响系统稳定性
  • CRITICAL
    • 产生不可逆的错误,使得系统无法正常工作
  • OFF

application.properties 配置示例:

logging.level.root = WARN
logging.level.org.hibernate.SQL = DEBUG

如果以 logging.level.*可以是根级别(root)也可以是 package 级别。

档案输出

logging.file = logs/logfile.log
logging.path = logs # 指定日志档案输出的目录

透过 logging.pattern.console 可以指定日志输出的格式,设置如下:

logging.pattern.console="%date{yyyy-MM-dd HH:mm:ss} -%5level [%15.15thread] %-40.40logger{39} : %msg%n"

日志参数

参数 描述
%logger 所在 Class 的全名
%date 定义日志输出的时间格式
%msg 错误的讯息
%level 日志等级
%thread 产生日志的执行续名称
%n 换行

范例

这边利用了 lombok 中的 @Log4j2 注解进行 Log 设置

    @GetMapping("/showNewEmployeeForm")
    public String showNewEmployeeForm(Model model) {
        Employee employee = new Employee();
        model.addAttribute("employee", employee);
        log.info("[showNewEmployeeForm] employee: {}", employee); # 可以像这样的使用,`{}` 对应 employee 参数
        return "new_employee";
    }

一天一篇,用力地挤出我的内容,下班後要来一篇文章真的好累QQ
明天会来个 Logback 配置,定义 log 输出讯息,以及之後如何整合至 EFK 中~


<<:  [Day 14] .Net 非同步概念整理

>>:  新新新手阅读 Angular 文件 - Interpolation(2) - Day14

Day1.准备好踏入嵌入式的第一步

嵌入式系统其实在我们的生活中无所不在,嵌入式系统是嵌入式计算机系统的简称,也就是说嵌入式系统与普通计...

[STM32G4系列] 学习清单

前言 这是一个关於 STM32G4系列 初次学习的学习清单 使用软件为 STM32CubeIDE 1...

Day 11 - 安装(ㄧ)Tiup工具

接下来让我们开始来实际安装TiDB。 TiDB在4.0版本之後推出了Tiup这个安装工具。功能十分齐...

#远距办公开放员工外网连线, 如何确保内外部资料传输安全?

疫情後,公司调整部份员工仍维持远距工作,但开放员工外网连线容易让内网出现资安漏洞 如何确保员工在公...

笔记我使用 NSIS 制作 Windows 安装档的过程

NSIS (Nullsoft Scriptable Install System) 是一个建立安装...