簡體   English   中英

Java日志記錄 - 如何將輸出重定向到記錄器的自定義日志文件?

[英]Java Logging - how to redirect output to a custom log file for a logger?

我有關於jdk日志記錄配置的問題。 我有一個EJB(部署到glassfish),它使用JDK Logging來輸出消息。 因此我使用一個帶有如下代碼的命名記錄器:

private static Logger logger = Logger.getLogger("org.imixs.workflow");
.....
       logger.fine(" some info...");
....

我知道我可以通過將以下行添加到Glassfish的logging.properties文件中來為我的記錄器配置loglevel:

.....
org.imixs.workflow.level=FINE

但是如何為記錄器指定輸出文件? 我想把名為'org.imixs.workflow'的記錄器中的所有消息放入一個單獨的文件中。 這可能嗎?

謝謝你的幫助

FileHandler的稍微混亂的模式屬性可用於此

handlers=java.util.logging.FileHandler
# Default global logging level. 
.level=INFO

#logging level for the foo.bar package
foo.bar.level=CONFIG 
java.util.logging.FileHandler.pattern=%h/java%u.log

模式由一個字符串組成,該字符串包含將在運行時替換的以下特殊組件:

“/”本地路徑名分隔符

“%t”系統臨時目錄

“%h”“user.home”系統屬性的值

“%g”用於區分旋轉日志的世代號

“%u”是解決沖突的唯一編號

“%%”轉換為單個百分號“%”

如果要記錄到多個文件,則可以通過為多個命名記錄器設置多個處理程序來完成

#FileHandler for file1    
java.util.logging.FileHandler.pattern = logging_property_test.log
java.util.logging.FileHandler.limit = 50000
java.util.logging.FileHandler.count = 1
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter

#FileHandler for file2
logging.FileHandler2.pattern = logging_property_test2.log
logging.FileHandler2.limit = 50000
FileHandler.count = 1
logging.FileHandler2.formatter = java.util.logging.SimpleFormatter


#setting handler for logger1
logging.PropertyTestingLogger.handlers=java.util.logging.FileHandler

#setting handler for logger2
logging.PropertyTestingLogger2.handlers=logging.FileHandler2

你可以看到訣竅是有一個logging.FileHandler2是一個自定義類,除了擴展FileHandler什么都不做

package logging;

import java.io.IOException;
import java.util.logging.FileHandler;

public class FileHandler2 extends FileHandler {

    public FileHandler2() throws IOException, SecurityException {
        super();
    }

}

背景 :遺憾的是,Java的創建者並沒有期望任何人登錄到多個文件。 如果查看java.util.logging.FileHandler的源代碼,您會發現,類屬性加載了pattern屬性:

public class FileHandler extends StreamHandler {

   private String pattern;

   private void configure() {

        String cname = getClass().getName();
        pattern = manager.getStringProperty(cname + ".pattern", "%h/java%u.log");

您應該使用FileHandler

FileHandler fileHandler = new FileHandler("myLogFile");
logger.addHandler(fileHandler);

有關配置記錄器的一些明確示例,請參見示例倉庫

您可能會發現這些答案對於從屬性文件進行設置很有用。

使用java.util.logging,僅通過修改配置文件不可能的。 不幸的是,您必須擴展FileHandler並配置該處理程序以過濾您想要記錄的內容。

暫無
暫無

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

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