Различные типы приложений для Logback Sifting Appender - PullRequest
2 голосов
/ 14 апреля 2011

Я настроил SiftingAppender следующим образом:

<appender name="FILE" class="ch.qos.logback.classic.sift.SiftingAppender">

    <discriminator>
        <key>context</key>
        <defaultValue>global</defaultValue>
    </discriminator>

    <!-- sift into different files -->
    <sift>
        <appender name="FILE-${context}" class="ch.qos.logback.core.FileAppender">
            <file>${logroot}/${context}.log</file>
            <encoder>
                <pattern>[%d{HH:mm:ss.SSS}] %-5level %logger{36} [%thread]%n%msg%n</pattern>
            </encoder>
        </appender>
    </sift>

</appender>

Теперь я хотел бы иметь там RollingFileAppender, но только для сообщений без context,Те, у кого context, как правило, не очень большие, но global one.

Возможно ли это?

Ответы [ 3 ]

4 голосов
/ 27 января 2012

Я думаю, что лучше всего в этой ситуации расширить SiftingAppender и переопределить добавление и выбросить все, что не имеет ключа (вместо использования по умолчанию).

Самый быстрый способ, который я могу придуматьэто создать два приложения и отправить события обоим.Затем настройте SiftingWhileRejectingDefaultAppender для использования RollingFileAppender и сконфигурируйте SiftingRejectAllButDefaultAppender для использования обычного FileAppender.

SiftingWhileRejectingDefaultAppender

*1001* 1011Affing 1010Af1B1D1
import ch.qos.logback.classic.sift.SiftingAppender;
import ch.qos.logback.classic.spi.ILoggingEvent;

public class SiftingRejectAllButDefaultAppender extends SiftingAppender {

    @Override
    protected void append(ILoggingEvent event) {
        String discriminatingValue = this.getDiscriminator().getDiscriminatingValue(event);
        if (discriminatingValue.equals("global")) {
            super.append(event);
        }
    }
}
3 голосов
/ 31 мая 2011

Я думаю, вы можете сделать это с помощью отличной конфигурации, если это вариант для вас.Вы можете написать оператор if на основе дискриминатора

appender("SIFT", GSiftingAppender) {
 discriminator(MDCBasedDiscriminator) {
      key = "context"
      defaultValue = "global"
 }
 sift {
  if(..) {
         appender(....) {
         }
  }
 }
}
0 голосов
/ 08 августа 2017

Вы можете использовать фильтр на appenders.Фильтр в вашем приложении будет включать, а фильтр в других приложениях будет исключать

...