У меня есть несколько потоков, генерирующих записи в журнале, и я использую SiftingAppender, чтобы узнать, кто что сделал. Все работает нормально, и теперь я пытаюсь сохранить журнал на mongodb.
В mongodb журнал необходимо сохранить во встроенный массив документов. Каждый пользовательский документ имеет один встроенный документ, который содержит массив встроенных документов, содержащих строки журнала
Поскольку я только начал изучать logback, теперь это должно быть методом проб и ошибок.
В приведенном ниже тесте logback.xml у меня есть file
, consol
и пользовательский appender.
Моя идея состояла в том, чтобы я мог поймать SiftingAppender discriminator value
в методе custom appender append()
. Тогда getMDCPropertyMap()
; в ILoggingEvent
дает мне значения MDC, но вопрос в том, является ли это эффективной техникой для того, что я хочу сделать
Я не вижу, чтобы в logback был какой-либо родной MDC-mongodb-appender или, возможно, я что-то пропустил.
<configuration>
<appender name="SIFT-FILE" class="ch.qos.logback.classic.sift.SiftingAppender">
<!-- in the absence of the class attribute, it is assumed that the
desired discriminator type is
ch.qos.logback.classic.sift.MDCBasedDiscriminator -->
<discriminator>
<key>userid</key>
<defaultValue>unknown</defaultValue>
</discriminator>
<sift>
<appender name="FILE-${userid}" class="ch.qos.logback.core.FileAppender">
<file>${userid}.log</file>
<append>true</append>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d [%thread] %level %mdc %logger{35} - %msg%n</pattern>
</layout>
</appender>
</sift>
</appender>
<appender name="SIFT-STDOUT" class="ch.qos.logback.classic.sift.SiftingAppender">
<!-- in the absence of the class attribute, it is assumed that the
desired discriminator type is
ch.qos.logback.classic.sift.MDCBasedDiscriminator -->
<discriminator>
<key>userid</key>
<defaultValue>unknown</defaultValue>
</discriminator>
<sift>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} ${userid}- %msg %n</pattern>
</encoder>
</appender>
</sift>
</appender>
<appender name="SIFT-MONGO" class="ch.qos.logback.classic.sift.SiftingAppender">
<!-- in the absence of the class attribute, it is assumed that the
desired discriminator type is
ch.qos.logback.classic.sift.MDCBasedDiscriminator -->
<discriminator>
<key>userid</key>
<defaultValue>unknown</defaultValue>
</discriminator>
<sift>
<appender name="MONGO" class="com.carlsberg.MongoAppender">
</appender>
</sift>
</appender>
<root level="DEBUG">
<appender-ref ref="SIFT-FILE" />
<appender-ref ref="SIFT-STDOUT" />
<appender-ref ref="SIFT-MONGO" />
</root>
</configuration>