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
正如你所看到的,诀窍是有一个日志记录。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");