You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot能否通过application.properties实现按包、按日志级别分文件记日志

Absolutely! Spring Boot (backed by Logback by default, though it works with Log4j2 too) lets you split logs exactly as you need—both by level and by package—right from your application.properties file. No need for separate XML config files if you don't want them. Let me walk you through how to set this up.

1. Split Logs by Level into Different Files

To route ERROR logs to error.log and DEBUG logs to debug.log, you'll define separate "appenders" (think of them as dedicated log channels) for each level, then attach them to your root logger.

Here's the full configuration:

# Base root logging level (captures all levels above this by default)
logging.level.root=INFO

# Appender for ERROR-level logs
logging.appender.error.file=./logs/error.log
logging.appender.error.level=ERROR
logging.appender.error.max-file-size=10MB  # Rollover when file hits 10MB
logging.appender.error.max-history=30     # Keep 30 days of old logs
logging.appender.error.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n

# Appender for DEBUG-level logs
logging.appender.debug.file=./logs/debug.log
logging.appender.debug.level=DEBUG
logging.appender.debug.max-file-size=10MB
logging.appender.debug.max-history=30
logging.appender.debug.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n

# Attach both appenders to the root logger
logging.root.appender-ref.error.ref=error
logging.root.appender-ref.debug.ref=debug

Optional: Restrict debug.log to only DEBUG logs

By default, the DEBUG appender will capture DEBUG, INFO, WARN, and ERROR logs. If you want debug.log to only contain DEBUG-level entries, add a level filter to the appender:

# Filter to keep only DEBUG logs in debug.log
logging.appender.debug.filter.level.type=ch.qos.logback.classic.filter.LevelFilter
logging.appender.debug.filter.level.level=DEBUG
logging.appender.debug.filter.level.onMatch=ACCEPT
logging.appender.debug.filter.level.onMismatch=DENY
2. Split Logs by Package into Different Files

If you want logs from specific packages (like com.yourproject.controller and com.yourproject.service) to go to separate files, you'll create appenders for each package and link them directly to those loggers.

Example configuration:

# Base root logging level
logging.level.root=INFO

# Appender for controller package logs
logging.appender.controller.file=./logs/controller.log
logging.appender.controller.level=DEBUG  # Capture DEBUG and above for controllers
logging.appender.controller.max-file-size=10MB
logging.appender.controller.max-history=30
logging.appender.controller.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n

# Appender for service package logs
logging.appender.service.file=./logs/service.log
logging.appender.service.level=INFO  # Only capture INFO and above for services
logging.appender.service.max-file-size=10MB
logging.appender.service.max-history=30
logging.appender.service.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n

# Link each appender to its target package
logging.logger.com.yourproject.controller.appender-ref.controller.ref=controller
logging.level.com.yourproject.controller=DEBUG

logging.logger.com.yourproject.service.appender-ref.service.ref=service
logging.level.com.yourproject.service=INFO
3. Combine Both: Split by Level AND Package

You can also mix these two approaches—for example, routing ERROR logs from your service package to service-error.log and DEBUG logs to service-debug.log:

# Appenders for service package levels
logging.appender.service-error.file=./logs/service-error.log
logging.appender.service-error.level=ERROR
logging.appender.service-error.layout.pattern=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n

logging.appender.service-debug.file=./logs/service-debug.log
logging.appender.service-debug.level=DEBUG
logging.appender.service-debug.filter.level.type=ch.qos.logback.classic.filter.LevelFilter
logging.appender.service-debug.filter.level.level=DEBUG
logging.appender.service-debug.filter.level.onMatch=ACCEPT
logging.appender.service-debug.filter.level.onMismatch=DENY

# Attach both appenders to the service package
logging.logger.com.yourproject.service.appender-ref.service-error.ref=service-error
logging.logger.com.yourproject.service.appender-ref.service-debug.ref=service-debug
logging.level.com.yourproject.service=DEBUG

A quick note: If you're using Log4j2 instead of Logback, the configuration syntax will be a bit different, but the core concept of defining appenders and routing logs to them remains identical.

内容的提问来源于stack exchange,提问作者Sanjay A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:23:15