我想用Log4J記錄我的Java項目。 我創建的src目錄下一個log4j.properties文件,內容如下:不同類別的Log4J記錄器
# Root logger option
log4j.rootLogger=INFO, file, stdout
log4j.logger.DEFAULT_LOGGER=INFO,file2
# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=file.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.appender.file2=org.apache.log4j.FileAppender
log4j.appender.file2.File=file2.log
log4j.appender.file2.layout=org.apache.log4j.PatternLayout
log4j.appender.file2.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
例如,我只想在我的主要方法使用「DEFAULT_LOGGER」。所以我寫了:
static Logger log = Logger.getLogger("DEFAULT_LOGGER");
log.fatal("Process Logger");
但是,當我執行的主要方法我打印消息「過程記錄器」所有的Appender(標準輸出,文件和文件2),但我只是想打印出來,以文件2。我該怎麼做或者更好地說我做錯了什麼?
第二點是,當我第二次執行主要方法時,它不會覆蓋文件和文件2,它只是在文本文件中添加一行。我怎樣才能避免這種情況?
謝謝。現在它的工作原理是輸出僅存儲在file2中,而不存儲在stdout中。 但還剩2件事。當我啓動主要方法時,它仍然創建file和file2。文件是空的,輸出只寫入file2,但我不希望文件被創建。這是如何工作的? 還有一個問題,即當我執行該方法2次時,log4j不會覆蓋file2,它只是將輸出添加到文件中。 – Metalhead89 2012-08-07 09:11:21
Log4j在開始處掃描屬性文件並創建所有附加到記錄器定義所需的文件。所以如果你不想創建文件,從記錄器中刪除appender:'log4j.rootLogger = INFO,file,stdout',make it:'log4j.rootLogger = INFO,stdout' – Tomer 2012-08-07 09:13:59
你爲什麼想要文件被覆蓋?這基本上擊敗日誌記錄的目的... – Tomer 2012-08-07 09:16:24