java log4j приоритетный вопрос ведения журнала - PullRequest
4 голосов
/ 20 марта 2011


Класс Level в log4j имеет следующий конструктор:

protected Level(int level, String levelStr,int syslogEquivalent)

Мой вопрос: когда используется параметр String levelStr?
Я определил свой собственный пользовательский аппендер и вэто я определил пользовательский Level следующим образом:

public static class CustomLevel extends Level {
  private static final long serialVersionUID = 1L;
  public static final Level ALERT = new CustomLevel(FATAL_INT, "ALERT", 2);
  protected CustomLevel(int level, String levelStr, int syslogEquivalent) {
           super(level, levelStr, syslogEquivalent);
      }
 }

В моем appender, в методе append я делаю:

Level newLevel = CustomLevel.ALERT; 
etc.

LoggingEvent newLoggingEvent = new LoggingEvent(
            event.getFQNOfLoggerClass(), event.getLogger(), event.getTimeStamp(), newLevel,
            event.getMessage(), event.getThreadName(), event.getThrowableInformation(),
            event.getNDC(), event.getLocationInformation(), event.getProperties()); 
super.append(newLoggingEvent);

На выходе журнала,когда я делаю custom_Logger.fatal(msg);, я вижу свое сообщение, но уровень FATAL.

main FATAL logging.customlog - Send an Error Message to log

Я думал, что это будет ALERT, как определено на моем пользовательском уровне (то есть main ALERT).
Так я что-то не так делаю здесь?Разве я не вижу ALERT в журнале вывода?
Если нет, то когда leveStr используется?

Ответы [ 2 ]

1 голос
/ 21 марта 2011

Вы инициализируете уровень, но не переопределяете остальные методы класса Level. Поэтому, когда регистратор вызывает CustomeLevel.toLevel (String), чтобы получить имя уровня, он устанавливает его как «FATAL»

См. Пример на http://jaitechwriteups.blogspot.com/2006/07/create-your-own-logging-level-in-log4j.html

0 голосов
/ 20 марта 2011

Я почти уверен, что это связано с этим:

public static final Level ALERT = new CustomLevel(FATAL_INT, "ALERT", 2);

Вы инициализируете уровень значением FATAL_INT.Затем библиотека предполагает, что ваш пользовательский уровень должен быть встроенным уровнем FATAL.Я бы попробовал указать, например, DEBUG_INT + 1.

...