Spring boot 带嵌入式tomcat的Spring引导应用程序,将访问日志发送到syslog
我有一个spring引导应用程序,它在AWS EC2实例上运行 可部署的只是一个内嵌了tomcat的jar 我试图让应用程序将其访问日志发送到syslog,以便使用AWS CloudWatch从不同的EC2实例收集日志 我已经尝试过,但由于以下问题,它无法与syslog一起工作: 然后我尝试了CommonRequestLoggingFilter,这似乎并没有将其日志发送到syslog 我想尝试用Spring引导应用程序将日志发送到syslog并不是一个罕见的愿望Spring boot 带嵌入式tomcat的Spring引导应用程序,将访问日志发送到syslog,spring-boot,logback,syslog,access-log,Spring Boot,Logback,Syslog,Access Log,我有一个spring引导应用程序,它在AWS EC2实例上运行 可部署的只是一个内嵌了tomcat的jar 我试图让应用程序将其访问日志发送到syslog,以便使用AWS CloudWatch从不同的EC2实例收集日志 我已经尝试过,但由于以下问题,它无法与syslog一起工作: 然后我尝试了CommonRequestLoggingFilter,这似乎并没有将其日志发送到syslog 我想尝试用Spring引导应用程序将日志发送到syslog并不是一个罕见的愿望 有什么综合方法可以做到这一点吗?
有什么综合方法可以做到这一点吗?我刚刚在我的应用程序中实现了这一点。(适用于弹簧护套1.5.6)
server:
tomcat:
accesslog:
enabled: true
pattern: "<APPNAME> %h %l %u %t \"%r\" %s %b %D"
prefix: "localhost_access_log"
suffix: .txt
basedir: /opt/tomcat
<!--This will print app logs in user facility-->
<appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender">
<syslogHost><<your host name>></syslogHost>
<port>514</port>
<facility>USER</facility>
<suffixPattern><<your pattern>></suffixPattern>
</appender>
<!-- This will print your access logs in local0 facility-->
<appender name="LOCAL0" class="ch.qos.logback.classic.net.SyslogAppender">
<syslogHost><<your host name>></syslogHost>
<port>514</port>
<facility>LOCAL0</facility>
<suffixPattern><<pattern>></suffixPattern>
</appender>
<Logger name="package path to ApiAccessLogValve" level="INFO"
additivity="false">
<appender-ref ref="LOCAL0" />
</Logger>
514
使用者
514
本地0
@Configuration
public class AccessValveConfig extends WebMvcConfigurerAdapter implements
EmbeddedServletContainerCustomizer {
private static XLogger logger = XLoggerFactory
.getXLogger(AccessValveConfig.class);
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
if (container instanceof TomcatEmbeddedServletContainerFactory) {
TomcatEmbeddedServletContainerFactory factory =
(TomcatEmbeddedServletContainerFactory) container;
AbstractAccessLogValve accessLogValve = new ApiAccessLogValve();
accessLogValve.setPattern("common");
factory.addContextValves(accessLogValve);
} else {
logger.error("WARNING! this customizer does not support your
configured container");
}
}
}
public class ApiAccessLogValve extends AbstractAccessLogValve {
private static XLogger logger = XLoggerFactory
.getXLogger(ApiAccessLogValve.class);
public ApiAccessLogValve(){
super();
}
@Override
protected void log(CharArrayWriter message) {
synchronized (this) {
logger.info(message.toString());
}
}
}
<!--This will print app logs in user facility-->
<appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender">
<syslogHost><<your host name>></syslogHost>
<port>514</port>
<facility>USER</facility>
<suffixPattern><<your pattern>></suffixPattern>
</appender>
<!-- This will print your access logs in local0 facility-->
<appender name="LOCAL0" class="ch.qos.logback.classic.net.SyslogAppender">
<syslogHost><<your host name>></syslogHost>
<port>514</port>
<facility>LOCAL0</facility>
<suffixPattern><<pattern>></suffixPattern>
</appender>
<Logger name="package path to ApiAccessLogValve" level="INFO"
additivity="false">
<appender-ref ref="LOCAL0" />
</Logger>