如何在spring-boot中配置tomcat访问日志的位置和名称?

时间:2015-02-12 16:46:30

标签: tomcat spring-boot logback

我在application.yml

中有一个带有以下配置的spring-boot应用程序
server:
contextPath: /rti
tomcat:
    access-log-enabled: true
    access-log-pattern: "%h %l %u %t \"%r\" %s %b %D"
    basedir: tomcat

这会提示创建访问日志tomcat / logs / access_log.2015-02-12.txt。

我希望能够配置创建访问日志的位置和命名内容;但经过多次搜索,我开始认为这是不可能的。有谁知道如何实现这个目标?

使用logback.xml中的logback和配置,应用程序日志记录正常工作

3 个答案:

答案 0 :(得分:7)

使用application.ymlhttps://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html)进行配置:

server.tomcat.accesslog:
  # Enable access log:
  enabled: true

  # Directory in which log files are created. Can be relative to the tomcat base dir or absolute:
  directory: /var/log/test 

  # Format pattern for access logs:
  # https://tomcat.apache.org/tomcat-8.0-doc/config/valve.html#Access_Log_Valve
  pattern: "%h %l %u %t "%r" %s %b %D"

  # Log file name suffix:
  suffix: ".log"

答案 1 :(得分:6)

您可以使用EmbeddedServletContainerCustomizer接口向嵌入式tomcat添加完全自定义的阀门。这对我有用:

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter implements EmbeddedServletContainerCustomizer {

    @Override
    public void customize(ConfigurableEmbeddedServletContainer container) {
        if (container instanceof TomcatEmbeddedServletContainerFactory) {
            TomcatEmbeddedServletContainerFactory factory = (TomcatEmbeddedServletContainerFactory) container;
            AccessLogValve accessLogValve = new AccessLogValve();
            accessLogValve.setDirectory("/var/log/test");
            accessLogValve.setPattern("common");
            accessLogValve.setSuffix(".log");
            factory.addContextValves(accessLogValve);
        } else {
            logger.error("WARNING! this customizer does not support your configured container");
        }
    }

}

答案 2 :(得分:1)

如果您使用application.yml进行配置。

您可以参考以下内容:

server:
  tomcat:
    basedir: tomcat/
    accesslog:
      enabled: true
      prefix: access-log
      suffix: .log
      # datetime remote-ip "request-referr" status (time-taken) 
      pattern: '%t %a "%r" %s %D'

您将生成一个名称为access-log.2018.08.22.log的文件。日志格式为

[22/Aug/2018:16:00:34 +0800] 0:0:0:0:0:0:0:1 "GET /search-query/video/123 HTTP/1.1" 200 666

在上面的示例中,相对于应用程序的工作目录,日志将在tomcat/logs中可用。

您可以设置此项以更改日志文件名:

server:
  tomcat:
    accesslog:
      prefix: access
      file-date-format: .yyyy-MM-dd
      suffix: .log

则日志格式为:access.2018-08-22.log

如果您要自定义日志格式,则可以更新pattern

有两种内部模式:

server.tomcat.accesslog.pattern=common

server.tomcat.accesslog.pattern=combined

有关更多信息,请参见此处:https://tomcat.apache.org/tomcat-8.0-doc/config/valve.html#Access_Logging