java - Logback 日志到主文件和客户端在单独的目录中

标签 java logback

我有一个 Java 服务器应用程序,我将所有常规数据记录到 server.log,并将每个单独的客户端记录到其自己的 hostname.log 文件。我想将 hostname.log 文件放在与 server.log 不同的目录中,最好以某种有组织的方式,因为有数千个 hostname.log 文件。

这是我现在使用的配置:

<appender name="SiftAppender" class="ch.qos.logback.classic.sift.SiftingAppender">
    <discriminator>
        <key>descriminatorid</key>
        <defaultValue>server</defaultValue>
    </discriminator>
    <sift>
        <appender name="FILE-${descriminatorid}" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${cmb.log.dir}/${descriminatorid}.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- daily rollover -->
                <fileNamePattern>${cmb.log.dir}/archive/${descriminatorid}.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
                <!-- keep ${maxbackupindex} days' worth of history capped at ${maxfilesize} total size -->
                <maxHistory>${cmb.log.maxbackupindex}</maxHistory>
                <totalSizeCap>${cmb.log.maxfilesize}</totalSizeCap>
            </rollingPolicy>
            <encoder>
                <pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %msg%n</pattern>
            </encoder>
        </appender>
    </sift>
</appender>

此配置将所有内容记录到 $cmb.log.dir。我想要的是这样的:

Server logs: $cmb.log.dir/server.log
Client logs: $cmb.log.dir/client/${descriminatorid}.log

或者更好的是:

Client logs: $cmb.log.dir/client/${firstLetter}/${descriminatorid}.log

其中 ${firstLetter} 是 $descriminitorid 的第一个字母。这样,日志将分布在更具可扩展性的层次结构中。

最佳答案

我找到的解决方案非常简单。由于我在 java 代码中生成 ${descriminatorid} ,因此我简单地将我想要的目录结构包含在该值中。因此,“discriminatorid”不再是“主机名”,而是现在的“client/firSTLetter/hostname”。

我确实是想得太多了。

关于java - Logback 日志到主文件和客户端在单独的目录中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53123063/

相关文章:

java - @Test(expected = Exception.class) 或 Assertions.assertThrows(...) 或assertThatThrownBy(..) 推荐哪一个?

jetty - 使用 logback 过滤掉扫描器事件

java - Spring 框架 application.properties 与 logback.xml

java - Logback - 在启动时删除日志文件

Java FX : Change the color of one unique letter in Label

java - 为什么在类中声明数组列表时不导入 java.util

java - 在后端处理 PUT http 请求中的可选字段的最佳方法是什么

java - 如何使用 Spring AOP 强制使用通用日志格式。想要附加一个字符串,例如每个记录器中的服务名称

jboss7.x - Logback 和 Jboss 7 - 不能一起工作?

android - 如何将 gradle 配置为仅将 logback-classic 用于 Android 中的单元测试?