You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 22:32:09