我的应用程序在其中创建一个Java日志文件
$HOME/javaN.log
其中N
是整数。有时,我的应用程序会运行几个实例,每个实例都会创建一个名为java1.log
,java2.log
等的日志文件。在执行过程中,我需要知道应用程序使用哪个日志文件。
是否可以通过编程方式确定日志文件的位置?
我在logging.properties
文件中将记录器定义为com.xyz.foo
。这是logging.properties的外观:
handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler
.level = WARNING
com.xyz.foo.level = FINEST
java.util.logging.FileHandler.pattern = %h/java%u.log
java.util.logging.FileHandler.level=FINEST
java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format=%1$tY:%1$tm:%1$td %1$tH:%1$tM:%1$tS[%4$s] %2$s%n%5$s%n%6$s%n
java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
此行
java.util.logging.FileHandler.pattern = %h/java%u.log
将如上所述在用户的主文件夹中创建日志文件。
日志文件的创建和命名由Java框架在后台自动处理。如果另一个进程已经创建了日志文件,例如,如果java0.log
存在,那么Logger
将创建java1.log
作为日志文件,它也会自动解决可能的命名冲突。
我知道如何显式设置日志文件,但是,我宁愿保持当前的日志记录机制,并获得Logger
为日志文件选择的名称。
答案 0 :(得分:0)
您可以提前创建一个HashMap {“ filename”:FileHandler},选择所需的名称并写入数据
public class TestLogging {
private static Logger logger = Logger.getLogger(TestLogging.class.getName());
public static void main(String[] args) throws IOException {
HashMap<String, FileHandler> logMap = new HashMap<String, FileHandler>();
logMap.put("a", new FileHandler("E:/work-java/wgx/ff//a.log"));
logMap.put("b", new FileHandler("E:/work-java/wgx/ff//b.log"));
aLog(logMap, "a");
// aLog(logMap, "b");
}
private static void aLog(HashMap<String, FileHandler> logMap, String key) {
logger.addHandler(logMap.get(key));
logger.logp(Level.INFO, "TestLogging.class", "main", "logging");
}
}
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE log SYSTEM "logger.dtd">
<log>
<record>
<date>2019-05-27T21:49:34</date>
<millis>1558964974608</millis>
<sequence>0</sequence>
<logger>com.huifer.TestLogging</logger>
<level>INFO</level>
<class>TestLogging.class</class>
<method>main</method>
<thread>1</thread>
<message>logging</message>
</record>
</log>