Поддерживает ли Log4j SyslogAppender MDC и NDC?

Просто действительно, поддерживает ли Log4j SyslogAppender MDC и NDC в том смысле, что выходные данные представляют собой структурированные данные, т.е. используют функции структурированных данных протокола?

Кроме того, существуют ли какие-либо ограничения на то, что можно поместить в MDC и успешно добавить в журнал?


person Simon Gibbs    schedule 02.06.2009    source источник


Ответы (2)


MDC и NDC являются частью протокола Syslog. Таким образом, log4j не поддерживает (и не может) поддерживать MDC/NDC в структурированных данных протокола Syslog. Однако ничто не мешает вам добавить данные MDC или NDC в часть «сообщение» сообщения системного журнала, установив параметр ConversionPattern для включения информации MDC.

Вот пример записи MDC с ключом «ki»:

log4j.rootLogger=INFO, SYSLOG
log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender
log4j.appender.SYSLOG.SyslogHost=a.host.name

# Facility must be one of the case-insensitive strings:
# KERN, USER, MAIL, DAEMON, AUTH, SYSLOG, LPR, NEWS, UUCP, CRON,
# AUTHPRIV, FTP, LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6,
# LOCAL7 
log4j.appender.SYSLOG.facility=KERN

log4j.appender.SYSLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.SYSLOG.layout.ConversionPattern=%r %p %c %X{ki} - %m\n

Для NDC вы должны заменить «%X{ki} просто на «%x» (обратите внимание на использование нижнего регистра).

Что касается второй части вашего вопроса, нет никаких ограничений на значения, которые вы можете поместить в MDC или NDC.

person Ceki    schedule 03.06.2009
comment
кто-нибудь может подумать, что этот парень написал log4j или что-то в этом роде. - person Gareth Davis; 19.08.2009
comment
Гарет Дэвис: на самом деле он сделал. - person cherouvim; 22.12.2010

Глядя на исходный код, я не вижу причин, по которым этого не должно быть.

Вы пробовали успешно писать в системный журнал, а затем писать что-то в свой NDC/MDC? Обратите внимание, что вам нужно включить это в PatternLayout. (используя %x или %X).

Похоже, что MDC не имеет каких-либо ограничений на то, что вы можете вставлять (опять же, на основе проверки исходного кода). Я подозреваю, что запись MDC просто выполнит toString() для содержимого MDC, и поэтому вы можете быть ограничены просто тем, насколько полезны/читабельны ваши объекты при отображении таким образом.

person Brian Agnew    schedule 02.06.2009
comment
Это просто добавит значение MDC в сообщение журнала или выведет структурированные данные. Меня беспокоит последующий анализ структурированных данных. - person Simon Gibbs; 02.06.2009
comment
Это зависит от реализации вашего объекта, удерживаемого MDC (обратите внимание, что вы используете %X с ключом - см. документ) - person Brian Agnew; 02.06.2009