Задать вопрос
viperz
@viperz
inspired by Java

О logback.xml — можно ли указать в каком пакете какой appender использовать?

Здравствуйте,

У меня приложение в плане логирования разрезано в 2 плоскости:
1 - локальные логи приложения
2 - логи изменений, которые это приложение делает в БД

Так вот. По п.2 логи должны писаться в БД, соответственно у них другая логика, свой аппендер с кэшем, чтобы писать батчами и тп.
Ну и возникает вопрос, можно ли как-то в конфиг файле указать - вот тут, в этом классе или пакете - я хочу использовать этот аппедер для базы данных, а в этих пакетах - другой аппендер?

Если можно , на пример конфига:

<configuration>
    <appender name="DB_APPENDER" class="com.test.logging.LogCachedAppender">
    </appender>
    <root level="debug">
        <appender-ref ref="DB_APPENDER" />
    </root>
</configuration>
  • Вопрос задан
  • 1334 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@zelan
Кратко обо мне не получится.
Я делаю так:

<configuration debug="false">
   
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>%-50class{50} [%-5level]:          %msg%n</Pattern>
        </layout>
    </appender>
    
    <appender name="gui" class="logback.appender.JavaFXAppender">
        <layoutPattern>[%-5level]:    %msg%n</layoutPattern>
    </appender>

    <!-- в коде я запрашиваю это логгер по имени, у него добавлен свой аппендер, все что передается в этот логгер - добавляется в добавленные аппендеры.
         если удалить этот логгер, то все, что было адресовано ему - пойдет в root
 -->
    <logger name="cardservices" level="debug"  additivity="false">
        <appender-ref ref="gui" />
    </logger>

    <root>
         <appender-ref ref="console" />
    </root>


</configuration>


Для нужного пакета и всех классов в нем, можно задать логгеру определенное постоянное имя. А потом просто вносить в конфиг логгер с этим именем и описанием его аппендеров.

В нужном пакете запрашиваю инициализирую логгер (при помощи обертки slf4j, если не пользуешься - инициализируй методами логбека):

private static Logger logger = LoggerFactory.getLogger("cardservices");

...
//сообщение пойдет в логгер с именем "cardservices" и, соответственно в его аппендеры (для данного примера аппендер "gui".
logger.info("rere");


В твоем случае будет как-то так:

<configuration>
    <appender name="DB_APPENDER" class="com.test.logging.LogCachedAppender">
    </appender>

    <logger name="DB_LOGGER" level="debug"  additivity="false">
        <appender-ref ref="DB_APPENDER" />
    </logger>

    <root level="debug">
        <appender-ref ref="OTHER_APPERNDER" />
    </root>
</configuration>


и в нужном пакете инициализировать логгер:

private static Logger logger = LoggerFactory.getLogger("DB_LOGGER");
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
viperz
@viperz Автор вопроса
inspired by Java
Ну или вообще, любой способ, как я могу завязать конкретный логгер только на свой DB_APPENDER
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы