返回 Skill 列表
extension
分类: 开发与工程无需 API Key

logback

Logback - 灵活且强大的日志框架,适用于Java和Spring Boot应用程序。作为Log4j的继任者,它支持原生SLF4J、异步日志记录以及自动文件滚动。使用场景:当用户提到“logback”、“spring boot logging”、“java logging configuration”,或询问关于“logback-spring.xml”、“rolling file appender”、“async logging in java”。不适用场景:SLF4J API的使用 - 应改用`slf4j`,Log4j2 - 应使用单独的Log4j2技能,Node.js的日志记录 - 应改用`winston`或`pino`,Python的日志记录 - 应改用`python-logging`。

person作者: jakexiaohubgithub

Logback - Quick Reference

When to Use This Skill

  • Configure logging in Spring Boot/Java applications
  • File appender with rotation
  • High-performance async logging

Deep Knowledge: Use mcp__documentation__fetch_docs with technology: logback for comprehensive documentation.

Configuration

logback-spring.xml (Spring Boot)

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>

    <property name="LOG_PATH" value="${LOG_PATH:-logs}"/>
    <property name="LOG_FILE" value="${LOG_FILE:-app}"/>

    <!-- Console Appender -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <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}</pattern>
        </encoder>
    </appender>

    <!-- Rolling File Appender -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/${LOG_FILE}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/${LOG_FILE}.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <maxFileSize>100MB</maxFileSize>
            <maxHistory>30</maxHistory>
            <totalSizeCap>3GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- Async Appender -->
    <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="FILE"/>
        <queueSize>512</queueSize>
        <discardingThreshold>0</discardingThreshold>
    </appender>

    <!-- Logger Configuration -->
    <logger name="com.myapp" level="DEBUG"/>
    <logger name="org.springframework" level="INFO"/>
    <logger name="org.hibernate.SQL" level="DEBUG"/>

    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="ASYNC"/>
    </root>

    <!-- Profile-specific -->
    <springProfile name="prod">
        <root level="WARN">
            <appender-ref ref="ASYNC"/>
        </root>
    </springProfile>
</configuration>

JSON Format (ELK Stack)

<appender name="JSON" class="ch.qos.logback.core.ConsoleAppender">
    <encoder class="net.logstash.logback.encoder.LogstashEncoder">
        <includeMdcKeyName>requestId</includeMdcKeyName>
        <includeMdcKeyName>userId</includeMdcKeyName>
    </encoder>
</appender>

MDC Usage

import org.slf4j.MDC;

MDC.put("requestId", UUID.randomUUID().toString());
MDC.put("userId", user.getId());
try {
    // Business logic
} finally {
    MDC.clear();
}

When NOT to Use This Skill

  • SLF4J API questions: Focus on API usage, not Logback implementation details
  • Log4j2 configuration: Different XML structure and features
  • Application code logging: Use SLF4J API, Logback is just the implementation
  • Non-Java projects: Use language-appropriate logging frameworks
  • Simple console output: System.out may be sufficient for basic scripts

Anti-Patterns

| Anti-Pattern | Why It's Bad | Solution | |--------------|--------------|----------| | Synchronous file appender in high-traffic | Blocks application threads | Use AsyncAppender wrapper | | No rolling policy | Logs fill disk space | Use RollingFileAppender with size/time policies | | Logging to console in production | Performance overhead, lost logs | Use file appenders, ship to centralized logging | | DEBUG level in production | Performance impact, disk usage | Use INFO or WARN in production profiles | | Not clearing MDC | Memory leaks, wrong context in threads | Always clear MDC in finally block | | Hardcoded log paths | Breaks across environments | Use properties: ${LOG_PATH} |

Quick Troubleshooting

| Issue | Cause | Solution | |-------|-------|----------| | Configuration not loaded | Wrong file name/location | Use logback-spring.xml in src/main/resources | | Logs not rotating | Missing rolling policy | Add SizeAndTimeBasedRollingPolicy | | Performance degradation | Synchronous appenders | Wrap with AsyncAppender | | MDC values not appearing | Pattern missing MDC placeholders | Add %X{key} to pattern | | Duplicate log entries | Logger additivity enabled | Set additivity="false" on logger | | Profile-specific config ignored | Using logback.xml instead | Rename to logback-spring.xml for Spring profiles |