如何自定义默认的java日志记录?

时间:2018-03-14 09:09:58

标签: java logging java.util.logging

我需要自定义日志级别(java.util.logging.Level除外)和java util logger中的自定义函数来记录这些级别的消息。

自定义级别: 1.调试 2.错误 3.致命

所以我创建了从Level扩展的XYZLevel,如下所示:

public class OKILevel extends Level {

public OKILevel(String name, int value) {
    super(name, value);
}

/* OKI Log Levels */
public static final Level FATAL = new OKILevel("FATAL",
        Level.SEVERE.intValue() + 100);

public static final Level ERROR = new OKILevel("ERROR",
        Level.SEVERE.intValue());

public static final Level DEBUG = new OKILevel("DEBUG",
        Level.FINE.intValue());

}

需要自定义功能: .debug(),. severe()等类似于logger中的.info。

对于记录器,我这样做:

static final Logger logger = Logger.getLogger(ABC.class.getName());

我无法弄明白:

static final XYZLogger logger = XYZLogger.getLogger(ABC.class.getName());

扩展Logger并没有帮助。

此外,对于此应用程序,需要传入logging.properties。 如何在logging.properties的.level中使用这些新级别?

1 个答案:

答案 0 :(得分:0)

如果您正在创建日志包装器,那么在发明新内容之前,您应该利用一些标准框架。

如果您希望应用程序使用新的记录器实现,则必须实现并安装自定义LogManager

  

此外,对于此应用程序,需要传入logging.properties。如何在logging.properties的.level中使用这些新级别?

所有.level解析通过 Level.parse方法。根据文档:

  

参数字符串可以包含级别名称或整数值。

     

例如:

     
      
  • "严重"

  •   
  • " 1000"

  •   

所以你应该写:

#Level.SEVERE + 100 = FATAL
some.logger.name.level = 1100

据说在某些Java版本中存在finding the correct level value by int的一些已知问题。

另一个选项,如果你只想让一个关卡的渲染输出不同,那么你应该看看Best way to override java.util.logging Level class to change the level strings