如何为Tomcat的java.util.logging自定义Handler设置属性
解决java.util.logging自定义Handler自定义属性无法加载的问题
java.util.logging的默认机制只会自动处理Handler的标准属性(比如level、formatter等),自定义属性需要手动读取配置。你可以按以下方式修改:
修改自定义Handler代码
在JdbcHandler中,通过重写configure()方法(更符合JUL初始化流程)或在构造方法里从LogManager获取配置属性:
package com.company.tomcat; import java.util.logging.Handler; import java.util.logging.LogRecord; public class JdbcHandler extends Handler { private String abc; @Override protected void configure() { super.configure(); // getProperty会自动拼接Handler全类名作为前缀查找配置 String abcProp = getProperty("abc"); if (abcProp != null) { setAbc(abcProp); } } public void setAbc(String abc) { this.abc = abc; } @Override public void publish(LogRecord record) { System.out.println("record " + record); System.out.println("abc属性值: " + abc); // 验证属性是否加载成功 } // 必须实现Handler的其他抽象方法 @Override public void flush() {} @Override public void close() throws SecurityException {} }
配置文件说明
你的logging.properties配置格式没问题,只需确保自定义属性前缀和Handler全类名一致即可:
handlers = java.util.logging.ConsoleHandler, com.company.tomcat.JdbcHandler .handlers = java.util.logging.ConsoleHandler, com.company.tomcat.JdbcHandler com.company.tomcat.JdbcHandler.level = FINE com.company.tomcat.JdbcHandler.abc=hello
原理:JUL初始化Handler时会自动调用configure()方法,getProperty("abc")会自动拼接Handler全类名作为前缀,匹配配置文件里的com.company.tomcat.JdbcHandler.abc项。
内容的提问来源于stack exchange,提问作者Ahmed Ashour
相关产品推荐
相关产品推荐

