【问题标题】:Spring Boot enable http requests logging (access logs)Spring Boot 启用 http 请求日志记录(访问日志)
【发布时间】:2014-06-13 01:44:52
【问题描述】:

spring boot提供的嵌入式tomcat服务器如何开启访问日志?我已经在application.properties 中尝试过,但它不会创建文件,也不会记录到控制台。

server.tomcat.access-log-enabled=true
server.tomcat.access-log-pattern=%a asdasd
logging.file=/home/mati/mylog.log

【问题讨论】:

  • 我假设您的意思是“application.properties”?文件名中的拼写错误是我能看到的唯一明显错误。请注意,logging.file 对 tomcat 访问日志没有影响(尽管如果您使用“正常”项目设置,则应该创建该文件)。通常,Tomcat Valve 在“./logs”(即相对于 user.dir)中创建日志。
  • 是的,这是我的拼写错误,但在我的项目中是正确的。我知道 Spring 正确读取它,因为 server.port=9900 工作正常。我看不到你指定的目录:(
  • 你能分享你的项目吗?
  • 属性文件中标志的形式没有什么不同(连字符或驼峰大小写同样适用)。
  • 在我写这个问题的时候,连字符是行不通的。我很高兴听到它现在起作用了。

标签: java http tomcat logging spring-boot


【解决方案1】:

这是一种让它们显示在控制台或您选择的任何文件中的方法。在任何@Configuration 类中声明Tomcat 的RequestDumperFilter

@Bean
public FilterRegistrationBean requestDumperFilter() {
    FilterRegistrationBean registration = new FilterRegistrationBean();
    Filter requestDumperFilter = new RequestDumperFilter();
    registration.setFilter(requestDumperFilter);
    registration.addUrlPatterns("/*");
    return registration;
}

这就是输出:

http-nio-8765-exec-1 START TIME        =30-may-2016 12:45:41
http-nio-8765-exec-1         requestURI=/info
http-nio-8765-exec-1           authType=null
http-nio-8765-exec-1  characterEncoding=UTF-8
http-nio-8765-exec-1      contentLength=-1
http-nio-8765-exec-1        contentType=null
http-nio-8765-exec-1        contextPath=
http-nio-8765-exec-1             cookie=JSESSIONID=E7259F5F9ED6B04CBE5A294C5F8CA5C6
http-nio-8765-exec-1             header=host=mies-057:8765
http-nio-8765-exec-1             header=connection=keep-alive
http-nio-8765-exec-1             header=accept=text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
http-nio-8765-exec-1             header=upgrade-insecure-requests=1
http-nio-8765-exec-1             header=user-agent=Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36
http-nio-8765-exec-1             header=referer=http://mies-057:1111/
http-nio-8765-exec-1             header=accept-encoding=gzip, deflate, sdch
http-nio-8765-exec-1             header=accept-language=es-ES,es;q=0.8
http-nio-8765-exec-1             header=cookie=JSESSIONID=E7259F5F9ED6B04CBE5A294C5F8CA5C6
http-nio-8765-exec-1             locale=es_ES
http-nio-8765-exec-1             method=GET
http-nio-8765-exec-1           pathInfo=null
http-nio-8765-exec-1           protocol=HTTP/1.1
http-nio-8765-exec-1        queryString=null
http-nio-8765-exec-1         remoteAddr=192.168.56.1
http-nio-8765-exec-1         remoteHost=192.168.56.1
http-nio-8765-exec-1         remoteUser=null
http-nio-8765-exec-1 requestedSessionId=E7259F5F9ED6B04CBE5A294C5F8CA5C6
http-nio-8765-exec-1             scheme=http
http-nio-8765-exec-1         serverName=mies-057
http-nio-8765-exec-1         serverPort=8765
http-nio-8765-exec-1        servletPath=/info
http-nio-8765-exec-1           isSecure=false
http-nio-8765-exec-1 ------------------=--------------------------------------------
http-nio-8765-exec-1 ------------------=--------------------------------------------
http-nio-8765-exec-1           authType=null
http-nio-8765-exec-1        contentType=application/json;charset=UTF-8
http-nio-8765-exec-1             header=Strict-Transport-Security=max-age=31536000 ; includeSubDomains
http-nio-8765-exec-1             header=X-Application-Context=EDGE:8765
http-nio-8765-exec-1             header=Content-Type=application/json;charset=UTF-8
http-nio-8765-exec-1             header=Transfer-Encoding=chunked
http-nio-8765-exec-1             header=Date=Mon, 30 May 2016 10:45:41 GMT
http-nio-8765-exec-1             status=200
http-nio-8765-exec-1 END TIME          =30-may-2016 12:45:41
http-nio-8765-exec-1 ===============================================================

然后将其作为任何标准 Spring Boot 日志进行管理。

【讨论】:

    【解决方案2】:

    试试

    server.tomcat.accessLogEnabled=true
    server.tomcat.accessLogPattern=%a asdasd
    

    并在/tmp/tomcat.<random>.<port>/logs 中查找输出文件。设置server.tomcat.basedir属性改变目录。

    【讨论】:

    • 在 Windows 下,Tomcat 在%TEMP%\tomcat.<randomID>.<portnumber>\logs 下创建日志文件。它不是相对于 user.dir
    • 我认为在所有平台上都是如此(除非您明确设置 server.tomact.basedir),但可能不是第一次创建此答案的时候。
    • Spring boot 最新版本:stackoverflow.com/a/62002598/8718377
    【解决方案3】:

    在 Spring Boot 1.5.1 中,properties mentioned by Dave Syer 不再有效,而是重命名为:

    server.tomcat.basedir=target/tomcat-logs
    server.tomcat.accesslog.enabled=true
    server.tomcat.accesslog.pattern=%t %a "%r" %s (%D ms)
    

    使用上面的配置,如果通过其根目录运行项目,则日志将在 target/tomcat-logs/log/access_log.* 中可用。*

    【讨论】:

      【解决方案4】:

      使用 Spring Boot 2.X,如果您想管理 访问日志,请将这些行添加到您的 application.yml 文件中:

      server:
        tomcat:
          basedir: /home/tmp
          accesslog:
            enabled: true
      

      它将在您定义的 basedir(此处为 /home/tmp)中创建一个名为 logs 的文件夹,其中包含访问日志文件。

      如果您想在控制台中访问日志,请这样做:

      server:
        tomcat:
          accesslog:
            enabled: true
            directory: /dev
            prefix: stdout
            buffered: false
            suffix:
            file-date-format:
      

      它将日志重定向到 /dev/stdout

      更多信息:https://community.pivotal.io/s/article/how-to-configure-access-log-entries-for-a-spring-boot-app?language=en_US

      【讨论】:

        【解决方案5】:

        如果您有一个 Spring Boot 应用程序,并希望启用 http 日志记录到 stdout,这在容器化应用程序中可能很有用,无需修改代码或配置文件,您可以添加以下环境变量

        server.tomcat.accesslog.enabled=true
        server.tomcat.accesslog.directory=/dev
        server.tomcat.accesslog.prefix=stdout
        server.tomcat.accesslog.suffix=
        server.tomcat.accesslog.file-date-format=
        

        注意 suffixfile-date-format 应该设置为空

        然后重新启动您的应用程序,您应该会获得日志记录

        【讨论】:

          猜你喜欢
          • 2012-11-07
          • 2012-09-12
          • 2018-05-18
          • 2022-06-21
          • 2021-11-19
          • 2015-02-08
          • 2017-12-26
          • 2017-11-01
          • 2021-03-15
          相关资源
          最近更新 更多