<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 定义日志文件存储路径 -->
    <property name="LOG_HOME" value="${user.home}/.autodev/logs" />
    <property name="APP_NAME" value="autodev-app" />
    <property name="JNDI_DISABLED" value="true"/>

    <!-- 控制台输出 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
        <!-- 只输出 INFO 及以上级别到控制台 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
    </appender>

    <!-- 文件输出 - 所有日志 -->
    <appender name="FILE_ALL" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/${APP_NAME}.log</file>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 按天轮转 -->
            <fileNamePattern>${LOG_HOME}/${APP_NAME}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 保留30天的日志 -->
            <maxHistory>30</maxHistory>
            <!-- 单个文件最大100MB -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!-- 总日志文件大小限制为5GB -->
            <totalSizeCap>5GB</totalSizeCap>
        </rollingPolicy>
    </appender>

    <!-- 错误日志单独文件 -->
    <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/${APP_NAME}-error.log</file>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/${APP_NAME}-error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxHistory>90</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>50MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <totalSizeCap>1GB</totalSizeCap>
        </rollingPolicy>
    </appender>

    <!-- UI 特定的日志级别配置 -->
    <logger name="cc.unitmesh.devins.ui" level="DEBUG" />
    <logger name="cc.unitmesh.agent" level="DEBUG" />
    <logger name="cc.unitmesh.devins" level="DEBUG" />
    <logger name="cc.unitmesh.llm" level="INFO" />
    <logger name="cc.unitmesh.indexer" level="INFO" />

    <!-- MCP 相关日志 -->
    <logger name="cc.unitmesh.agent.mcp" level="DEBUG" />
    <logger name="cc.unitmesh.agent.config" level="DEBUG" />

    <!-- Compose UI 相关日志 -->
    <logger name="androidx.compose" level="WARN" />
    <logger name="org.jetbrains.skia" level="WARN" />

    <!-- 第三方库日志级别 -->
    <logger name="io.ktor" level="INFO" />
    <logger name="kotlinx.coroutines" level="WARN" />
    <logger name="ai.koog" level="INFO" />

    <!-- Apache HTTP Client Wire Logging - Silence verbose output -->
    <logger name="org.apache.hc.client5.http.wire" level="WARN" />

    <!-- 根日志级别 -->
    <root level="INFO">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE_ALL" />
        <appender-ref ref="FILE_ERROR" />
    </root>
</configuration>
