![](/img/trans.png)
[英]How can I output the name of the current java.util.logging.Logger log file name?
[英]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.