簡體   English   中英

log4j沖突?

[英]log4j conflicting?

我有一個htmlunit應用程序,由於下面的命令在控制台中打印了太多不需要的消息,因此關閉了以下幾行的日志記錄。

LogFactory.getFactory().setAttribute(
    "org.apache.commons.logging.Log",
    "org.apache.commons.logging.impl.NoOpLog");
java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit")
    .setLevel(Level.OFF);   
java.util.logging.Logger.getLogger("org.apache.commons.httpclient")
    .setLevel(Level.OFF);

然后,我將最新的log4j jar添加到我的項目中並對其進行配置,這樣我就可以擁有自己的自定義日志消息。 但是現在,來自htmlunit的所有內容也都轉到了我的日志文件中。 我該如何預防? 我只希望自己的日志記錄消息進入日志文件。

關於log4j,需要了解的重要一件事是它的“記錄器層次結構”的概念,以及它如何影響其設置。 要引用log4j文檔,

如果一個記錄器的名稱后跟一個點,則該記錄器是另一個記錄器的祖先,該后跟點的名稱是該子記錄器名稱的前綴。 如果記錄器與子記錄器之間沒有祖先,則稱該記錄器為子記錄器的父級。

例如,名為“ com.foo”的記錄器是名為“ com.foo.Bar”的記錄器的父級。 同樣,“ java”是“ java.util”的父代,也是“ java.util.Vector”的祖先。 大多數開發人員都應該熟悉這種命名方案。

記錄器繼承其父級的設置,“根記錄器”始終位於層次結構的頂部。 因此,在某種程度上,您可以將根記錄器視為“默認”記錄器設置,然后可以僅將代碼中包含的記錄器添加到這些設置中。

我不知道如何在代碼中進行設置,但是這是我使用log4j.properties文件所要做的:

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=logs/springapp.log
log4j.appender.file.MaxFileSize=1MB
log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

# Direct log messages to console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

# Root logger settings: by default only log messages at level "ERROR" and above 
# will be logged. These messages will be written to console
log4j.rootLogger=error, console

# All loggers with names starting with "org.somecompany.someproject"
# will log messages at all levels "DEBUG" and above.
# They will be written to file as well as console; writing to console
# is enabled since that setting is inherited from the root logger.
log4j.logger.org.somecompany.someproject=debug, file

然后,假設每個類的記錄器都被命名為該類的完全限定名稱,則只需將上述配置中的“ org.somecompany.someproject”替換為您項目中軟件包的根軟件包名稱即可,您想要的行為。

有關更多信息,請參閱log4j文檔

暫無
暫無

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

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