Java Boot日志案例如何配置输出

wen java案例 30

本文目录导读:

Java Boot日志案例如何配置输出

  1. 使用 application.yml/properties 配置(基础方式)
  2. 使用 logback-spring.xml(更强大的配置方式)
  3. 多环境配置(开发/生产)
  4. 在代码中使用日志
  5. 使用 Lombok 简化日志
  6. 配置说明

在Java Boot(Spring Boot)应用中配置日志输出,主要有以下几种常见方式:

使用 application.yml/properties 配置(基础方式)

application.yml 配置示例:

logging:
  level:
    root: INFO
    com.example: DEBUG
    org.springframework.web: ERROR
  pattern:
    console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
    file: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
  file:
    name: logs/application.log
    path: logs/
    max-size: 10MB
    max-history: 30
  charset:
    console: UTF-8
    file: UTF-8

application.properties 配置示例:

logging.level.root=INFO
logging.level.com.example=DEBUG
logging.level.org.springframework.web=ERROR
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
logging.file.name=logs/application.log
logging.file.path=logs/
logging.file.max-size=10MB
logging.file.max-history=30
logging.charset.console=UTF-8
logging.charset.file=UTF-8

使用 logback-spring.xml(更强大的配置方式)

src/main/resources 下创建 logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 定义变量 -->
    <property name="LOG_PATH" value="./logs"/>
    <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
    <!-- 控制台输出 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <!-- 文件输出 - 按天滚动 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/application.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/application-%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
            <totalSizeCap>1GB</totalSizeCap>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <!-- 错误日志单独输出 -->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/error-%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
            <totalSizeCap>500MB</totalSizeCap>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- 异步输出,提升性能 -->
    <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>256</queueSize>
        <appender-ref ref="FILE"/>
    </appender>
    <!-- 设置日志级别 -->
    <logger name="com.example" level="DEBUG" additivity="false">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="ASYNC"/>
        <appender-ref ref="ERROR_FILE"/>
    </logger>
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="ASYNC"/>
        <appender-ref ref="ERROR_FILE"/>
    </root>
</configuration>

多环境配置(开发/生产)

application-dev.yml

logging:
  level:
    root: DEBUG
  pattern:
    console: "%clr(%d{yyyy-MM-dd HH:mm:ss}){cyan} %clr([%thread]){yellow} %clr(%-5level){magenta} %clr(%logger{36}){blue} - %msg%n"

application-prod.yml

logging:
  level:
    root: WARN
    com.example: INFO
  file:
    name: /var/log/application.log
    max-size: 50MB
    max-history: 90

在代码中使用日志

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
@Service
public class UserService {
    private static final Logger logger = LoggerFactory.getLogger(UserService.class);
    public void getUser(Long id) {
        logger.debug("查询用户信息,ID: {}", id);
        try {
            // 业务逻辑
            logger.info("用户查询成功,ID: {}", id);
        } catch (Exception e) {
            logger.error("用户查询失败,ID: {}", id, e);
        }
    }
}

使用 Lombok 简化日志

添加 Lombok 依赖后:

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class UserService {
    public void getUser(Long id) {
        log.debug("查询用户信息,ID: {}", id);
        log.info("用户查询成功,ID: {}", id);
        log.error("用户查询失败,ID: {}", id, exception);
    }
}

配置说明

配置项 说明 推荐值
logging.level 设置日志级别 开发用DEBUG,生产用INFO
logging.pattern 日志输出格式 包含时间、线程、级别、类名、消息
logging.file 日志文件配置 设置文件名、路径、大小、保留天数
控制台输出 开发环境方便调试 带颜色格式
文件输出 生产环境记录 按天滚动,自动清理

选择哪种方式取决于你的项目需求,简单的项目用 application.yml 就够了,复杂的项目推荐使用 logback-spring.xml。

抱歉,评论功能暂时关闭!