【发布时间】:2021-02-14 09:22:11
【问题描述】:
我正在使用 Apache Log4j 记录器 (import org.apache.logging.log4j.core.Logger) 以 JSON 格式将消息发送到系统日志服务器。
我发送的消息是这样的:
{"id":"1"}
但是,在我收到的 syslog 服务器中:
Feb 14 10:33:27 localhost {"id":"1"}
如何在消息本身之前删除此附加信息(Feb 14 10:33:27 localhost)?
我的记录器配置
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, null)};
LoggerConfig loggerConfig = LoggerConfig.createLogger("false", Level.DEBUG, loggerName,
"true", refs, null, getConfig(), null);
loggerConfig.addAppender(syslogAppender, null, 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;
}
这是我的 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,
0,
0,
true,
appenderName,
true,
ignoreExceptions,
Facility.toFacility(reportingFacilityType.name()),
null,
Rfc5424Layout.DEFAULT_ENTERPRISE_NUMBER,
true,
null,
null,
null,
true,
null,
null,
null,
null,
null,
null,
null,
null,
config,
Charset.forName("UTF-8"),
null,
new LoggerFields[]{},
true); //false
}
【问题讨论】:
-
时间戳和主机名通常由 syslogd 在将消息写入文件时添加。你用的是什么系统日志?
标签: java logging log4j2 syslog