Как определить дополнительный уровень журнала Java?

стандартное ведение журнала Java определяет следующие уровни журнала:

  • ТЯЖЕЛЫЙ (самый высокий)
  • ПРЕДУПРЕЖДЕНИЕ
  • ИНФОРМАЦИЯ
  • КОНФИГУРАЦИЯ
  • ОТЛИЧНО
  • ТОНКИЙ
  • ЛУЧШИЙ

Это несовместимо с RFC 5424, так как в нем отсутствует уровень NOTICE между INFO и WARNING. В Java отсутствуют некоторые дополнительные уровни ведения журнала (ошибка, критическое состояние, оповещение и чрезвычайная ситуация), но УВЕДОМЛЕНИЕ — это тот, который причиняет мне боль.

Есть ли способ расширить список возможных уровней ведения журнала, чтобы добавить отсутствующий уровень УВЕДОМЛЕНИЯ? Или нужно переписывать весь лог?


person ceving    schedule 28.02.2013    source источник


Ответы (3)


Это должно работать

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

    private Level2(String name, int level) {
        super(name, level);
    }
}
person Evgeniy Dorofeev    schedule 28.02.2013
comment
это уровень ведения журнала от FINEST = 300 до SEVERE = 1000. INFO = 800 WARNING = 900 - person Evgeniy Dorofeev; 28.02.2013
comment
Как можно использовать пример (имеется в виду: он мог бы быть немного более подробным)? - person U. Windl; 20.04.2018

Спасибо Евгению. Это полный пример:

Уровень системного журнала

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 ();
        }
    }
}
person ceving    schedule 28.02.2013
comment
Обратите внимание, что в этом примере вы забыли уровень CRITICAL. Тем не менее, спасибо, было очень полезно! - person Loek; 03.10.2017
comment
Для лучшего понимания вы можете добавить числовые уровни исходных Level в качестве комментариев между... - person U. Windl; 20.04.2018

Вы можете расширить Level class и предоставить больше возможностей.

person UVM    schedule 28.02.2013
comment
Вопрос был ли и как, но вы отвечаете только на первый из двух. - person U. Windl; 20.04.2018