【问题标题】:How do I configure the location and name of tomcat access log in spring-boot?spring-boot中如何配置tomcat访问日志的位置和名称?
【发布时间】:2015-04-13 12:27:14
【问题描述】:

我有一个 spring-boot 应用程序,在 application.yml 中有以下配置

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 和 logback.xml 中的配置,应用程序日志记录工作正常

【问题讨论】:

    标签: tomcat spring-boot logback


    【解决方案1】:

    使用application.yml (https://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"
    

    【讨论】:

    • 文件夹需要预先存在
    • 有人知道在 application.yml 方法中使用了什么 Valve 吗?
    • @AR3Y35 对我来说比有很多嵌套键时的属性更具可读性
    【解决方案2】:

    如果您使用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

    【讨论】:

      【解决方案3】:

      您可以使用 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");
              }
          }
      
      }
      

      【讨论】:

      • 谢谢zmitrok。正是我想要的。
      猜你喜欢
      • 2014-01-01
      • 2014-06-29
      • 2020-03-30
      • 1970-01-01
      • 2016-01-21
      • 2017-09-25
      • 2015-11-03
      • 2018-01-05
      • 1970-01-01
      相关资源
      最近更新 更多