JBoss / Wildfly - Безопасная и эффективная фильтрация журналов - Несколько обработчиков регистрируют в одном файле - PullRequest
0 голосов
/ 19 сентября 2019

Какой самый безопасный и эффективный способ применения выражений фильтра к журнальным сообщениям, которые всегда происходят с одной и той же категорией?

У меня более 100 приложений в одном контейнере, которые регистрируют один и тот же файл.Сообщения, которые я хочу обработать, очень специфичны.Применение одной сложной спецификации фильтра к каждому сообщению кажется чрезмерной нагрузкой, поэтому я решил создать отдельные регистраторы для каждой категории с сообщением, которое я хочу отфильтровать.Каждый регистратор получает свой собственный обработчик со своей спецификацией фильтра.Таким образом, я применил бы логику фильтрации только к наименьшему возможному количеству сообщений журнала.

Вот регистраторы в standalone.xml:

<root-logger>
    <level name="INFO"/>
    <handlers>
        <handler name="CONSOLE"/>
        <handler name="FILE"/>
    </handlers>
</root-logger>
<logger category="org.hibernate.engine.jdbc.spi.SqlExceptionHelper" use-parent-handlers="false">
    <level name="INFO"/>
    <handlers>
        <handler name="CONSOLE"/>
        <handler name="SQL_EXECUTION_HELPER_FILE"/>
    </handlers>
</logger>
<logger category="org.jboss.as.ejb3.invocation" use-parent-handlers="false">
    <level name="INFO"/>
    <handlers>
        <handler name="CONSOLE"/>
        <handler name="EJB3_INVOCATION_FILE"/>
    </handlers>
</logger>

Вот обработчики файлов:

<periodic-rotating-file-handler name="FILE" autoflush="true">
    <formatter>
        <named-formatter name="PATTERN"/>
    </formatter>
    <file relative-to="jboss.server.log.dir" path="server.log"/>
    <suffix value=".yyyy-MM-dd"/>
    <append value="true"/>
</periodic-rotating-file-handler>
<periodic-rotating-file-handler name="SQL_EXECUTION_HELPER_FILE">
    <filter-spec value="any(  not(match(&quot;ERROR: duplicate key value violates unique constraint \&quot;option_option_expiry_id_option_type_id_strike_price_key\&quot;&quot;)),  all(  match(&quot;ERROR: duplicate key value violates unique constraint \&quot;option_option_expiry_id_option_type_id_strike_price_key\&quot;&quot;),  levelChange(WARN)  )  )"/>
    <formatter>
        <named-formatter name="PATTERN"/>
    </formatter>
    <file relative-to="jboss.server.log.dir" path="server.log"/>
    <suffix value=".yyyy-MM-dd"/>
    <append value="true"/>
</periodic-rotating-file-handler>
<periodic-rotating-file-handler name="EJB3_INVOCATION_FILE">
    <filter-spec value="any(  not(match(&quot;EJB Invocation failed on component OptionProductManagementDataService for method public void com.nodalexchange.optionproductmanagement.OptionProductManagementDataService.insert&quot;)),  all(  match(&quot;EJB Invocation failed on component OptionProductManagementDataService for method public void com.nodalexchange.optionproductmanagement.OptionProductManagementDataService.insert&quot;),  levelChange(WARN)  )  )"/>
    <formatter>
        <named-formatter name="PATTERN"/>
    </formatter>
    <file relative-to="jboss.server.log.dir" path="server.log"/>
    <suffix value=".yyyy-MM-dd"/>
    <append value="true"/>
</periodic-rotating-file-handler>

Я не понимаю, как работают эти обработчики файлов, например, используют ли они общий дескриптор файла или каждый открывает свой собственный.Это всегда работало хорошо для меня, за исключением одного случая, когда я получал сообщения только от одного обработчика и ничего больше, что заставляет меня полагать, что использовать несколько обработчиков небезопасно, но я не смог воспроизвести это.

  1. Существует ли риск повреждения файлов при записи многими обработчиками в один и тот же файл?
  2. Есть ли лучший способ?

1 Ответ

1 голос
/ 21 сентября 2019

Я бы определенно не рекомендовал использовать несколько обработчиков для записи в один и тот же файл.Определенно могут быть проблемы с этим.

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

...