如何定义附加的Java日志级别?

问题描述:

standard Java logging定义了以下日志级别:如何定义附加的Java日志级别?

  • 严重(最高)
  • 警告
  • INFO
  • CONFIG
  • FINE
  • FINER
  • FINEST

这与RFC 5424不兼容,因为它缺少INFO和WARNING之间的NOTICE级别。 Java缺少一些额外的日志级别(错误,危急,警报和紧急情况),但NOTICE是伤害我的一个。

有什么办法来扩展可能的日志级别的列表,以添加缺少的通知级别?还是有必要重写整个日志?

这应该工作

class Level2 extends Level { 
    public static final Level2 NOTICE = new Level2("NOTICE", 850); 

    private Level2(String name, int level) { 
     super(name, level); 
    } 
} 
+0

什么是850? IBM代码页? ;-) – ceving 2013-02-28 10:36:37

+0

这是从FINEST = 300到SEVERE = 1000的日志级别。INFO = 800 WARNING = 900 – 2013-02-28 10:43:20

+0

我的错误已修复 – 2013-02-28 11:18:11

您可以扩展Level class并提供更多功能。

感谢叶夫根尼。这是完整的例子:

SyslogLevel

 
import java.util.logging.Level; 

public class SyslogLevel extends Level 
{ 
    public static SyslogLevel EMERG = new SyslogLevel("EMERG", 1100); 
    public static SyslogLevel ALERT = new SyslogLevel("ALERT", 1000); 
    public static SyslogLevel ERR  = new SyslogLevel("ERR",  950); 
    public static SyslogLevel WARNING = new SyslogLevel("WARNING", 900); 
    public static SyslogLevel NOTICE = new SyslogLevel("NOTICE", 850); 
    public static SyslogLevel INFO = new SyslogLevel("INFO", 800); 
    public static SyslogLevel DEBUG = new SyslogLevel("DEBUG", 300); 

    protected SyslogLevel (String name, int value, String resourceBundleName) 
    { 
     super (name, value, resourceBundleName); 
    } 

    protected SyslogLevel (String name, int value) 
    { 
     super (name, value); 
    } 
} 

记录

 
import java.util.logging.Logger; 
import java.util.logging.Level; 
import java.util.logging.FileHandler; 
import java.util.logging.SimpleFormatter; 

public class logging 
{ 
    public static void main(String[] args) 
    { 
     Logger logger = Logger.getLogger ("MyLog"); 
     FileHandler fh; 
     try { 
      fh = new FileHandler ("logging.log", true); 
      logger.addHandler (fh); 
      logger.setLevel (Level.ALL); 
      fh.setFormatter (new SimpleFormatter()); 
      logger.log (SyslogLevel.NOTICE, "Run!"); 
     } 
     catch (java.io.IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

请注意,本例中忘记了“CRITICAL”级别。谢谢,但是非常有用! – Loek 2017-10-03 14:23:47