Java日志配置指南:使用Slf4j和Logback将日志保存到指定文件

1. 概述

Java日志配置指南:使用Slf4j和Logback将日志保存到指定文件

新项目需要添加日志需求,于是网上查找了日志配置。要求是将日志保存到指定的文件中。网上搜了文章,发现没有特别完整的文章,所以自己整理一下。

1.Java日志概述

日志记录是应用程序的重要组成部分。线上的问题追踪、基于日志的业务逻辑统计分析等都离不开日志。 Java领域有很多日志框架。目前常用的日志框架有Log4j 1、Log4j 2、Commons Logging、Slf4j、Logback、Jul等。

2. Java常见日志框架类别 2. 流程

我们这里使用lombok自带的Slf4j。我们只需要引入这个依赖即可

1.添加POM依赖

 
            org.projectlombok
            lombok
            true
 

2.添加logback.xml

位置在src/main/resources下面



    JPANAME
    
    
    
    
    
    
    
        
            ${log.pattern}
        
    
    
        
            ${log.pattern}
        
        
            
            ${log.file}
            
            30
            50MB
        
        true
    
    
        5000
        0
        false
        
    
    
    
    
    
        
        
    

3、测试代码

 @Slf4j
@RestController
public class TestController {
    @GetMapping("/getcookies")
    public String readAllCookies(HttpServletRequest request) {
        String re = "";
        Cookie[] cookies = request.getCookies();
        if (cookies != null) {
            re = Arrays.stream(cookies)
                    .map(c -> c.getName() + "=" + c.getValue())
                    .collect(Collectors.joining(", "));
        }
        log.debug("输出DEBUG级别日志");
        log.info("输出INFO级别日志");
        log.warn("输出WARN级别日志");
        log.error("输出ERROR级别日志");
        log.info(re);
        return re;
    }
}

3.源码地址

项目地址:springboot-12-assemble模块

4.logback简介 1.logback简介

Logback是log4j创始人设计的另一个开源日志组件,官网:。目前分为以下几个模块:

2. logback 取代 log4j 的原因: 更快的实现:Logback 的内核被重写,在一些关键执行路径上性能提升了 10 倍以上。而且,不仅logback的性能得到提升,初始内存负载也更小。经过极其充分的测试:Logback 已经经历了多年和无数小时的测试。 Logback 测试处于完全不同的级别。 Logback-classic 非常自然地实现了 SLF4j:Logback-classic 实现了 SLF4j。当使用SLF4j时,你不会感觉到logback经典。而且由于 logback-classic 非常自然地实现了 slf4j,因此很容易切换到 log4j 或其他。您只需将其作为另一个jar包提供,无需触及通过SLF4JAPI实现的代码。文档非常齐全 官方网站有两百多页的文档。自动重新加载配置文件。当配置文件被修改时,Logback-classic可以自动重新加载配置文件。扫描过程快速且安全,并且不需要创建额外的扫描线程。这项技术充分保证了应用程序能够在JEE环境中愉快地运行。 Lilith是日志事件的观察者,类似于log4j的电锯。而且lilith还可以处理大量的日志数据。谨慎的模式和非常友好的恢复。在谨慎模式下,多个 FileAppender 实例在多个 JVM 下运行,并且可以安全地写入相同的日志文件。

RollingFileAppender 有一些限制。 Logback的FileAppender及其子类包括RollingFileAppender可以非常友好地从I/O异常中恢复。配置文件可以处理不同的情况,开发者经常需要在不同的环境(开发、测试、生产)下判断不同的Logback配置文件。这些配置文件只有一些细小的差别,可以通过 、 、 来实现,使一个配置文件适应多种环境。过滤器 有时,您需要诊断问题并记录它。在log4j中,唯一的办法就是降低日志级别,但这会产生大量日志,影响应用程序性能。在Logback中,除了某些特殊情况之外,您可以继续维持该日志级别。例如,如果用户Alice登录,她的日志将处于DEBUG级别,而其他用户可以继续以WARN级别登录。实现该功能只需要添加4行XML配置即可。可以参考MDCFlter。 SiftingAppender(一个非常通用的Appender):它可以用于根据任何给定的运行参数来分割日志文件。例如SiftingAppender可以区分日志事件并跟踪用户的Session,然后每个用户都会有一个日志文件。自动压缩已键入的日志文件:RollingFileAppender 在生成新文件时将自动压缩键入的日志文件。

压缩是一个异步过程,因此即使对于大型日志文件,应用程序在压缩过程中也不会受到任何影响。栈树有包版本:Logback在打印栈树日志时会带上包数据。自动删除旧的日志文件:通过设置TimeBasedRollingPolicy或SizeAndTimeBasedFNATP的maxHistory属性,可以控制已生成的日志文件的最大数量。如果您设置 maxHistory 12,则超过 12 个月的日志文件将被自动删除。 3.logback配置介绍

Logger 用作日志记录器。与应用对应的上下文关联后,主要用于存储日志对象,还可以定义日志类型和级别。

Appender主要用于指定日志输出的目的地。目的地可以是控制台、文件、远程套接字服务器、MySQL、PostreSQL、Oracle 等数据库、JMS 和远程 UNIX Syslog 守护进程等。

Layout 负责将事件转换为字符串并输出格式化的日志信息。

每个记录器都与一个 LoggerContext 关联。 LoggerContext 负责创建记录器并以树结构排列记录器。所有其他记录器也是通过 org.slf4j.LoggerFactory 类的静态方法 getLogger 获取的。 getLogger 方法将记录器名称作为参数。使用相同名称调用 LoggerFactory.getLogger 方法将始终获得对同一记录器对象的引用。

可以为记录器分配级别。级别包括:TRACE、DEBUG、INFO、WARN 和 ERROR,在 ch.qos.logback.classic.Level 类中定义。如果没有为记录器分配级别,它将继承其最近的祖先的级别。根记录器的默认级别是 DEBUG。

打印方法决定了请求的日志记录级别。例如,如果 L 是记录器实例,则语句 L.info("..") 是级别为 INFO 的日志记录语句。如果日志请求的级别大于或等于其记录器的有效级别,则称该日志请求已启用;否则,就被认为是被禁用的。日志请求级别为p,其记录器的有效级别为q。仅当 p>=q 时才会执行该请求。

这条规则是 logback 的核心。级别顺序为:TRACE < DEBUG < INFO < WARN < ERROR

4.Logback的默认配置

如果配置文件logback-test.xml和logback.xml不存在,logback会默认调用BasicConfigurator来创建最小配置。最小配置由与根记录器关联的 ConsoleAppender 组成。输出使用 PatternLayoutEncoder 进行格式化,模式为 %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n。根记录器的默认级别是 DEBUG。

Logback配置文件的语法非常灵活。因为它很灵活,所以不能使用 DTD 或 XML 模式来定义。尽管如此,配置文件的基本结构可以这样描述:它以零个或多个元素开头,后跟零个或多个元素,有零个或多个元素,后至多有一个元素。

尝试在classpath下找到logback-test.xml文件;如果该文件不存在,则搜索文件logback.xml;如果两个文件都不存在,logback 会自动使用 BasicConfigurator 进行配置,这将导致日志记录输出到控制台。 5、logback.xml常用配置详解

scan:当该属性设置为true时,如果配置文件发生变化,将重新加载。默认值为 true。

scanPeriod:设置监控配置文件是否被修改的时间间隔。如果没有给出时间单位,则默认单位是毫秒。该属性在 scan 为 true 时生效。默认间隔为 1 分钟。

debug:该属性设置为true时,会打印出logback内部日志信息,可以实时查看logback运行状态。默认值为 false。

例如:

 
     
 

例如:

 
     myAppName 
    
    

名称:变量的名称

value:值是变量定义的值

例如:

 
    
   ${APP_Name} 
    

key:标识此的名称;

datePattern:设置将当前时间(解析配置文件的时间)转换为字符串的模式,格式为java.txt.SimpleDateFormat。

例如:

 
       
      ${bySecond} 
       
    

5.1. ConsoleAppender将日志输出到控制台,有以下子节点:

:格式化日志。 (具体参数稍后解释)

:String System.out(默认)或System.err(区别就不多说了)

例如:

](javascript:void(0)

你可能想看:
« 上一篇
下一篇 »

相关推荐

java中什么是冒泡,冒泡算法

2026年09月06日

28阅读

java中冒号,java双冒号

2026年09月06日

26阅读

java中的->,java中的是什么意思

2026年09月06日

26阅读

java中的super用法,Java中super的说明

2026年09月06日

28阅读

java中反射的应用,java中反射的应用场景

2026年09月06日

26阅读

java中开关的定义,Java关键字有哪些

2026年09月06日

26阅读