java 日志配置

本文介绍了如何在普通Java项目和Spring Boot项目中配置日志系统,包括引入SLF4J和Logback依赖,创建logback-spring.xml配置文件,设置不同级别的日志输出到控制台和文件,并展示了Lombok的使用。在Spring Boot项目中,通过配置logging.level来调整日志级别,并引入了Spring Cloud Sleuth进行服务链路追踪。

1.普通项目

  • 引入maven依赖
       <!-- logback+slf4j -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.36</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.11</version>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.11</version>
            <type>jar</type>
        </dependency>
        <!--lombok插件支持-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
  • 添加配置文件 logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="false">
    <springProperty scop="context" name="spring.application.name" source="spring.application.name" defaultValue=""/>
    <property name="log.path" value="logs/${spring.application.name}"/>
    <!-- 彩色日志格式 -->
    <property name="CONSOLE_LOG_PATTERN"
              value="${CONSOLE_LOG_PATTERN:-%clr(%d{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}}" />
    <!-- 彩色日志依赖的渲染类 -->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
    <conversionRule conversionWord="wEx"
                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
    <!-- Console log output(不加控制台输出不了日志) -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>


    <!-- Log file debug output -->
    <appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/debug.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/%d{yyyy-MM, aux}/debug.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <maxFileSize>50MB</maxFileSize>
            <maxHistory>90</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%date [%thread] %-5level [%X{traceId},%X{spanId}][%logger{50}] %file:%line - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- Log file error output -->
    <appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/%d{yyyy-MM}/error.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <maxFileSize>50MB</maxFileSize>
            <maxHistory>90</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%date [%thread] %-5level [%X{traceId},%X{spanId}][%logger{50}] %file:%line - %msg%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
    </appender>

    <!-- Level: FATAL 0  ERROR 3  WARN 4  INFO 6  DEBUG 7 -->
    <root level="INFO">
        <!--(不加控制台输出不了日志)-->
        <appender-ref ref="console" />
        <appender-ref ref="debug"/>
        <appender-ref ref="error"/>
    </root>
</configuration>

  • 测试
@Slf4j
public class LogTest {
    /**
     * @param args
     */
    public static void main(String[] args) {
        log.info("测试lombok1");
        log.error("测试lombok2");
    }
}

2.springboot

  • springboot的项目中,已经有对日志的依赖支持,所以无需引入
<dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter</artifactId>
</dependency>
  • 配置和上面的普通工程一样。注意:名字 logback-spring.xml 不能改,否则会识别不到
    在这里插入图片描述
    bootstrap.yml增加配置
# 日志 :只在mapper层使用debug,方便调试SQL
logging:
  level:
    com.xxx.xxx.mapper: debug
#链路追踪,日志有跟踪id
 <!--监控 没引客户端,目前应该仅用在无感发布判断脚本是否在线-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--服务链路追踪-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-sleuth</artifactId>
        </dependency>
### Java日志系统配置方法 Java日志系统提供了多种配置方式,允许开发者根据项目需求灵活设置日志级别、输出格式、输出目标等。以下是一些常见的配置方法和指南。 #### 1. 使用 `log4j` 配置日志系统 `log4j` 是 Java 日志框架的早期代表之一,它通过配置文件(如 XML 或 properties 文件)支持日志级别控制、输出定向等功能。以下是一个 `log4j.properties` 文件的示例: ```properties # 设置日志的根级别为 INFO,并指定使用的 appender 为 console log4j.rootLogger=INFO, console # 定义控制台输出的 appender log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.Target=System.out log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n ``` 上述配置文件定义了日志的根级别为 `INFO`,并将日志输出到控制台。`ConversionPattern` 指定了日志的输出格式,包括日期、线程号、日志级别、类名和日志消息等信息[^1]。 #### 2. 使用 `logback` 配置日志系统 `logback` 是另一个流行的日志框架,它提供了更强大的功能和更高的性能。`logback` 的配置文件通常是一个 XML 文件,例如 `logback.xml`: ```xml <configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> </appender> <root level="info"> <appender-ref ref="STDOUT" /> </root> </configuration> ``` 该配置文件定义了一个控制台输出的 appender,并设置了日志的根级别为 `info`。`pattern` 元素指定了日志的输出格式,与 `log4j` 的 `ConversionPattern` 类似[^2]。 #### 3. 使用 `java.util.logging` 配置日志系统 `java.util.logging` 是 Java 自带的日志框架,其默认的配置文件位于 JRE 的 `lib` 目录下的 `logging.properties` 文件中。可以通过修改该文件来配置日志系统: ```properties # 设置全局日志级别 .level=INFO # 设置控制台输出的格式 java.util.logging.ConsoleHandler.level=INFO java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter # 设置文件输出的格式和路径 java.util.logging.FileHandler.level=INFO java.util.logging.FileHandler.pattern=./logs/app.log java.util.logging.FileHandler.append=true ``` 上述配置文件设置了全局日志级别为 `INFO`,并定义了控制台和文件输出的格式。`FileHandler.append=true` 表示日志文件将以追加形式写入,而不是覆盖[^4]。 #### 4. 使用 SLF4J 作为日志门面 `SLF4J`(Simple Logging Facade for Java)是一个日志门面,允许开发者在运行时选择具体的日志实现(如 `log4j`、`logback` 或 `java.util.logging`)。以下是一个使用 `SLF4J` 的代码示例: ```java import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Test { public static final Logger logger = LoggerFactory.getLogger("猫猫"); public static void main(String[] args) { logger.debug("main方法开始执行了"); logger.info("开始执行第二行日志,开始做除法"); int a = 9; int b = 3; logger.info("a=" + a); logger.info("b=" + b); System.out.println(a / b); System.out.println(logger); } } ``` 在这个示例中,`logger` 对象通过 `LoggerFactory` 创建,并指定了日志的类别名称为“猫猫”。`logger.debug` 和 `logger.info` 方法用于记录不同级别的日志信息[^3]。 #### 5. 自定义日志配置 除了使用默认的配置文件外,还可以通过编程方式动态配置日志系统。例如,在 `logback` 中,可以通过代码动态修改日志级别: ```java import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; import org.slf4j.LoggerFactory; public class LogLevelChanger { public static void changeLogLevel(String loggerName, String level) { Logger targetLogger = (Logger) LoggerFactory.getLogger(loggerName); targetLogger.setLevel(Level.toLevel(level)); } } ``` 该代码示例展示了如何通过 `logback` API 动态更改日志级别。`changeLogLevel` 方法接受日志名称和新的日志级别作为参数,并将指定日志对象的日志级别设置为新的值。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值