Spring-Boot Embedded Tomcat - 生成 localhost.log 和 cataline.out 文件

Posted

技术标签:

【中文标题】Spring-Boot Embedded Tomcat - 生成 localhost.log 和 cataline.out 文件【英文标题】:Spring-Boot Embedded Tomcat - generate localhost.log and cataline.out files 【发布时间】:2018-12-20 03:50:43 【问题描述】:

我有一个使用嵌入式 tomcat 运行的 spring-boot 应用程序。我们正在使用 logback 和 slf4j 进行日志记录。

我正在尝试通过 spring-boot 应用程序生成 catalina.out 和 localhost.log 文件的方法。看起来 catalina.out 是由以独立模式启动 tomcat 容器的启动脚本生成的,catalina.out 文件不是在使用嵌入式 tomcat 的 spring-boot 应用程序中生成的。

localhost.log 文件怎么样?这同样适用于 localhost.log 文件吗?

另外,如何通过我的 spring-boot 应用程序中的 logback/slf4j 绑定更改嵌入式 tomcat 的日志级别。

有什么建议吗?

【问题讨论】:

你看这里的解决方案了吗***.com/questions/48312851/… 你也可以关注我的一个解决方案***.com/a/51381030/6824968 【参考方案1】:
    1.在“application.properties”中添加logging.config=classpath:logback.xml logging.path=$your log path。 在你的类路径中创建一个“logback.xml”配置文件(请自行搜索配置文件的内容)。 您已经可以通过以上两个步骤创建一个日志文件,如果您通过“java -jar”命令启动您的应用程序,您可能还需要“-Djava.io.tmpdir=$your log path” (与“logging.path”配置相同)参数指定日志存储路径。

【讨论】:

【参考方案2】:

要定义嵌入式 Tomcat 日志路径,请在 application.properties 中添加这些行

server.tomcat.accesslog.directory=logs # Directory in which log files are created. Can be absolute or relative to the Tomcat base dir.
server.tomcat.accesslog.enabled=false # Enable access log.
server.tomcat.accesslog.file-date-format=.yyyy-MM-dd # Date format to place in the log file name.

用于通过 logback 为嵌入式 tomcat 配置日志级别

使用这个链接

https://dzone.com/articles/configuring-logback-with-spring-boot

【讨论】:

【参考方案3】:

你必须像这样在spring boot中手动配置tomcat容器

你必须创建 EmbeddedServletContainerFactory 的 bean 并在 tomcat 容器中配置日志,下面是示例代码(我没有测试它,但它可能会运行)。

tomcat 现在自动搜索类路径中的 logback-access.xml 文件并配置日志记录

对于 Spring boot 版本

@SpringBootApplication
public class ABCApplication 


   @Bean
   public EmbeddedServletContainerFactory servletContainer() 

    TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();


    LogbackValve logbackValve = new LogbackValve();

    logbackValve.setFilename("logback-access.xml");


    tomcat.addContextValves(logbackValve);


    return tomcat;



public static void main(String[] args) 
    SpringApplication.run(ABCApplication.class, args);


EmbeddedServletContainerFactory 替换为 TomcatServletWebServerFactory 是 spring boot 版本 2.0.0 ,所以使用所需的工厂来配置 tomacat。

现在你可以像这样提供你的 logback-access.xml

  <?xml version="1.0" encoding="UTF-8"?>
  <configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
  <encoder>
  <pattern>%h %l %u %t &quot;%r&quot; %s %b</pattern>
  </encoder>
  </appender>

 <appender-ref ref="STDOUT" />

 </configuration> 

您可以将appender添加到xml以记录tomcat登录文件。

你得看看 LogbackValve

您必须为 LogbackValve 添加以下依赖项

   <dependency>
    <groupId>net.rakugakibox.spring.boot</groupId>
    <artifactId>logback-access-spring-boot-starter</artifactId>
  </dependency>

希望对jagamot有帮助!

【讨论】:

如果配置有任何问题可以在评论@jagamot 中提问

以上是关于Spring-Boot Embedded Tomcat - 生成 localhost.log 和 cataline.out 文件的主要内容,如果未能解决你的问题,请参考以下文章

解决spring-boot启动中碰到的问题:Cannot determine embedded database driver class for database type NONE(转)(代码片段

Spring-boot简单的理解

Spring boot Artemis 嵌入式代理行为

Spring gzip 与 Tomcat gzip

强制spring hateoas生成https链接而不是http

如何在 Gradle 中指定 servlet-api 版本?