将日志回写到单独目录中的主文件和客户端

时间:2018-11-02 17:10:59

标签: 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的首字母。这样,日志将以更具可伸缩性的层次结构进行分发。

1 个答案:

答案 0 :(得分:0)

我发现的解决方案非常简单。由于我在Java代码中生成$ {descriminatorid},因此我简单地在该值中包含了我想要的目录结构。因此,现在不再是“ descriminatorid”为“主机名”,而是“客户端/首字母/主机名”。

我肯定是想过一想。