suporte O Log4j SyslogAppender MDC e NDC
-
06-09-2019 - |
Pergunta
Dados Simples realmente, suporta Log4j SyslogAppender MDC e NDC no sentido de que a saída está estruturado ou seja, usa os dados estruturados características do protocolo?
Além disso, existem limites sobre o que pode ser colocado no MDC e com êxito anexado ao log?
Solução
MDC nem NDC são parte do protocolo syslog. Assim, não faz log4j (nem pode) apoiar MDC / NDC dentro dos dados estruturados do protocolo syslog. No entanto, nada impede que você adicionar dados do MDC ou NDC na parte "mensagem" da mensagem syslog, definindo o parâmetro ConversionPattern para incluir MDC informatation.
Aqui está um exemplo de uma entrada MDC com a tecla "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
Para NDC, você iria substituir "% X {ki} com apenas "% x"(note o uso de minúsculas).
Quanto à segunda parte da sua pergunta, não há limites para os valores que você pode colocar dentro de MDC ou NDC.
Outras dicas
Olhando para o código-fonte, eu não vejo nenhuma razão pela qual não deveria.
Você já tentou escrever com sucesso para syslog, e em seguida, escrever com algo em sua NDC / MDC? Note que você terá que ativar este no PatternLayout (utilizando% x% ou X).
O MDC não parecem ter quaisquer limitações sobre o que você pode inserir (mais uma vez, com base em inspecionar o código fonte). Eu suspeito que a escrita MDC simplesmente executar uma toString()
sobre o conteúdo do MDC, e assim você pode ser limitada simplesmente como útil / legível seus objetos são quando processado desta forma.