簡體   English   中英

log4j-找不到附加程序,自定義配置文件

[英]log4j - no appenders could be found, custom config file

我第一次在項目中使用log4j,並且嘗試對日志輸出使用自定義配置。 我希望記錄器配置位於自定義文件中,而不是log4j.xml或log4j.properties中。 這就是我現在所擁有的:

構造函數:

public Manager(int managerID, String loggerConfigFile) {
    this.MANAGER_ID = managerID;
    logger = Logger.getLogger("testLogger" + MANAGER_ID);
    PropertyConfigurator.configure(loggerConfigFile);
}

首次調用記錄器的方法:

public void getPacketsFromStream(InputStream inputStream) {
    logger.info("Manager " + MANAGER_ID + " started.");

(還有更多,但這並不重要)

test1.config的內容(這是構造函數中loggerConfigFile的值)

testLogger1=DEBUG,A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n

我檢查,並配置文件類路徑中。

我希望這會導致記錄器將那一條語句寫入控制台。 相反,我得到(使用-Dlog4j.debug標志)以下輸出:

log4j: Trying to find [log4j.xml] using context classloader sun.misc.Launcher$AppClassLoader@1f12c4e.
log4j: Trying to find [log4j.xml] using sun.misc.Launcher$AppClassLoader@1f12c4e class loader.
log4j: Trying to find [log4j.xml] using ClassLoader.getSystemResource().
log4j: Trying to find [log4j.properties] using context classloader sun.misc.Launcher$AppClassLoader@1f12c4e.
log4j: Trying to find [log4j.properties] using sun.misc.Launcher$AppClassLoader@1f12c4e class loader.
log4j: Trying to find [log4j.properties] using ClassLoader.getSystemResource().
log4j: Could not find resource: [null].
log4j: Could not find root logger information. Is this OK?
log4j: Finished configuring.
log4j:WARN No appenders could be found for logger (testLogger1).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

我究竟做錯了什么?

編輯:

我按照第一個答案的建議進行操作-之前移動了log4j配置,並將rootLogger添加到配置文件log4j.rootLogger=DEBUG,A1 ,並獲得了預期的輸出。 然后,我嘗試對配置文件進行更多修改,並最終得到以下結果:

log4j.rootLogger=DEBUG,A0
testLogger1=DEBUG,A1

log4j.appender.A0=org.apache.log4j.ConsoleAppender
log4j.appender.A1=org.apache.log4j.ConsoleAppender

log4j.appender.A0.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout=org.apache.log4j.PatternLayout

log4j.appender.A0.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x --- %m%n
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n

請注意,A0和A1的輸出格式略有不同。 這是我在輸出中得到的:

log4j: Trying to find [log4j.xml] using context classloader sun.misc.Launcher$AppClassLoader@1f12c4e.
log4j: Trying to find [log4j.xml] using sun.misc.Launcher$AppClassLoader@1f12c4e class loader.
log4j: Trying to find [log4j.xml] using ClassLoader.getSystemResource().
log4j: Trying to find [log4j.properties] using context classloader sun.misc.Launcher$AppClassLoader@1f12c4e.
log4j: Trying to find [log4j.properties] using sun.misc.Launcher$AppClassLoader@1f12c4e class loader.
log4j: Trying to find [log4j.properties] using ClassLoader.getSystemResource().
log4j: Could not find resource: [null].
log4j: Parsing for [root] with value=[DEBUG,A0].
log4j: Level token is [DEBUG].
log4j: Category root set to DEBUG
log4j: Parsing appender named "A0".
log4j: Parsing layout options for "A0".
log4j: Setting property [conversionPattern] to [%-4r %-5p [%t] %37c %3x --- %m%n].
log4j: End of parsing for "A0".
log4j: Parsed "A0" options.
log4j: Finished configuring.
0    INFO  [main]                           testLogger1     --- Manager 1 started.

如何獲取log4j以使用testLogger1及其附加程序A1,而不是rootLogger和A0? 我希望getLogger("testLogger1")能夠做到這一點。

您應實例化Logger 之前配置Log4J:

public Manager(int managerID, String loggerConfigFile) {
    PropertyConfigurator.configure(loggerConfigFile);
    this.MANAGER_ID = managerID;
    logger = Logger.getLogger("testLogger" + MANAGER_ID);
}

您還應該在配置中定義一個根記錄器,以避免“找不到根記錄器信息”。 例如:

log4j.rootLogger=DEBUG, A1

有關更多詳細信息,請參見http://logging.apache.org/log4j/1.2/manual.html 例如,您可以使用Java環境變量來指定包含Log4J配置的文件名/路徑(而不是在Java代碼中執行此操作)。

閱讀完整的log4j手冊似乎很有用-似乎在配置文件中,記錄器名稱必須以log4j.logger.為前綴log4j.logger. 以下配置文件為我工作:

log4j.logger.testLogger1=DEBUG,A1

log4j.appender.A1=org.apache.log4j.ConsoleAppender

log4j.appender.A1.layout=org.apache.log4j.PatternLayout

log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n

暫無
暫無

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

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