问题描述
目前,我的软件使用 Java 中的 Log4j 记录器和 SyslogAppender 发送系统日志消息(导入 org.apache.logging.log4j.core.appender.SyslogAppender;)。 这是我的 SyslogAppender 配置:
private SyslogAppender createSyslogAppender(ReportingSendProtocolType protocol,ReportingFacilityType reportingFacilityType,String host,int port,boolean ignoreExceptions,String appenderName,Configuration config) {
return SyslogAppender.createAppender(host,port,protocol.name(),null,true,appenderName,ignoreExceptions,Facility.toFacility(reportingFacilityType.name()),Rfc5424Layout.DEFAULT_ENTERPRISE_NUMBER,config,Charset.forName("UTF-8"),new LoggerFields[]{},true); //false
}
这就是我如何将 SyslogAppender 与记录器一起使用
private Logger configureLogger(String appenderName,String loggerName,SyslogAppender syslogAppender) {
try {
if (syslogAppender != null) {
syslogAppender.start();
getConfig().addAppender(syslogAppender);
AppenderRef[] refs = new AppenderRef[]{AppenderRef.createAppenderRef(appenderName,null)};
LoggerConfig loggerConfig = LoggerConfig.createLogger("false",Level.DEBUG,loggerName,"true",refs,getConfig(),null);
loggerConfig.addAppender(syslogAppender,null);
getConfig().removeLogger(loggerName);
getConfig().addLogger(loggerName,loggerConfig);
getContext().updateLoggers();
return getContext().getLogger(loggerName);
}
} catch (IllegalStateException e) {
LOGGER.error("An error occurred while configuring syslog settings");
LOGGER.trace("Exception: ",e);
throw e;
}
return null;
}
然后我使用记录器发送消息
sysLogger = configureLogger(SYSLOG_APPENDER_NAME,ITP_LOGGER_NAME,syslogAppender);
sysLogger.log(levelsMapping.get(level),msg);
我目前支持 3 种格式(CEF/LEEF/RAW),我想添加另一种格式 - Json 格式。
起初,我和其他格式一样添加了 Json 格式。 例如json格式的msg:{"id":"0"}
但是在我将此 json 消息发送到系统日志服务器后,该消息与系统日志标头一起发送,如下所示。
02 -14 -2021 13: 35: 38 User.Warning 10.100 .65 .147 2 月 14 日 12:35: 37 本地主机 {"id":"0"}
粗体部分干扰了 json 解析器。 有没有办法删除这部分?或者使用 syslog 发送 json 消息的正确方法是什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)