如何设置`logging.properties`的客户处理程序的属性

问题描述 投票:0回答:1

在尝试为 Tomcat 添加自定义处理程序时(使用

java.util.logging
),我找不到添加自定义属性的方法。

例如如何设置处理程序的

abc
属性的值?

# logging.properties

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
package com.company.tomcat;

public class JdbcHandler extends Handler {
  private String abc;

  public void setAbc(String abc) {
    this.abc = abc;                             // this is not set
  }

  @Override
  public void publish(LogRecord record) {
    System.out.println("record " + record);     // this is called
  }
  ...
}
tomcat logging java.util.logging
1个回答
0
投票

对于 JDK 和 Tomcat,自定义处理程序必须在创建时与 LogManager 交互以读取解析和加载的值。您必须设置 java.util.logging.Handler 类定义的所有属性以及新属性。

这是一个帮助您入门的示例:

import java.util.logging.LogManager; //Use the JUL LogManager

public class JdbcHandler extends Handler {
  private String abc;

  public JdbcHandler() {
     final LogManager m = LogManager.getLogManager();
     final String p = getClass().getName(); //property prefix
 
     String lvl = m.getProperty(p + ".level"); //parse and set the level
     try {
        super.setLevel(lvl == null ? Level.ALL : Level.parse(lvl));
     } catch(RuntimeException failed) {
        this.reportError("Unable to set level", failed, ErrorManager.OPEN_FAILURE);
        super.setLevel(Level.ALL);
     }

    //TODO set other handler properties for formatter, filter, encoding, and errorManager.


     //set your property for JDK, Tomcat, etc.
     initAbc(m.getProperty(p + ".abc"));
  }

  //WildFly will support this way of assigning the property.
  public void setAbc(String abc) {
     initAbc(abc);
  }

  private void initAbc(String abc) {
    this.abc = abc;
  }

  @Override
  public void publish(LogRecord record) {
    if (!isLoggable(record) {
       return;
    }

    System.out.println("record " + record);     // this is called
  }
...
}

值得保留公共

setAbc
方法,因为 WildFly 将使用该方法来分配属性。

© www.soinside.com 2019 - 2024. All rights reserved.