簡體   English   中英

log4j-錯誤,登錄調試?

[英]log4j - on ERROR, log DEBUG?

我對log4j(v2)相對較新,但是我相信我已經用光了資源,因此我在這里提出我的問題。

我有一個可運行的log4j配置,我將在問題末尾附加該配置。 該應用程序使用cronjob每x分鍾運行一次。

我想看到的log4j行為如下:

  1. 所有INFO(及以上)日志記錄都已完成到文件A
  2. 對文件B的所有錯誤(及以上記錄)都已記錄
  3. 如果發生錯誤(或以上),則會發送一封包含給定執行的DEBUG(及以上)行的郵件。

我使用以下配置實現了1和2。 使用log4j是否也可以使用3號(如果不是,為什么呢?),如果可以,怎么辦?

當前配置:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>
    <RandomAccessFile name="LogFile" fileName="/var/log/fileA.log">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </RandomAccessFile>
    <RandomAccessFile name="ErrorLogFile" fileName="/var/log/fileB.log">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </RandomAccessFile>
    <SMTP name="MailError" subject="Error occurred" to="a@b.com" smtpHost="mail.foo.bar" from="b@c.net"/>
    <Async name="Async">
      <AppenderRef ref="LogFile"/>
    </Async>
    <Async name="Errors">
      <AppenderRef ref="ErrorLogFile"/>
      <AppenderRef ref="MailError"/>
    </Async>
  </Appenders>
  <Loggers>
    <Root level="DEBUG">
      <AppenderRef ref="Console" level="INFO"/>
      <AppenderRef ref="Async" level="INFO"/>
      <AppenderRef ref="Errors" level="ERROR"/>
    </Root>
  </Loggers>
</Configuration>

我認為您應該可以使用ThresholdFilter實現此目的。 將您的根記錄程序級別設置為TRACE,以便將所有事件發送到所有附加程序,然后在每個附加程序上放置不同的閾值過濾器。 log4j2手冊包含一個示例。


(編輯)在更好地理解了需求之后,我認為SMTP Appender已經滿足了您的需要:它在內部保留了觸發ERROR事件的事件(默認為512)的緩沖區。 這些先前的事件將包含在電子郵件中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM