Logback log для основного файла и клиентов в отдельном каталоге - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть приложение на сервере 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 голосов
/ 08 ноября 2018

Решение, которое я нашел, было очень простым. Так как я генерирую $ {descriminatorid} в своем Java-коде, я просто включил нужную структуру каталогов в это значение. Таким образом, вместо «descriminatorid», являющегося «именем хоста», теперь это «client / firstletter / hostname».

Я определенно пытался переосмыслить это.

...