弹簧启动嵌入了雄猫日志



我正在使用带有弹簧引导 1.5.9 的弹簧启动嵌入式雄猫, 我也使用 Log4j2。

最近我在加载过程中遇到了问题,所以我想更好地了解 tomcat 日志 [不是访问日志],我尝试了(在应用程序属性中):

logging.level.org.apache.tomcat: INFO
logging.level.org.apache.catalina: INFO

但以上这些都不起作用。 还有其他方法可以实现它吗?

找到了!! 现在,您可以通过 3 个简单的步骤在应用的 Log4j 日志文件中看到嵌入式 Tomcat 的内部日志:

1] 添加到您的 POM:

<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jul</artifactId>
</dependency>

2] 将一个新的 JVM 参数添加到正在运行的参数中,例如:

java -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager -jar target/demo-0.0.1-SNAPSHOT.jar

3] 添加到您的应用程序属性:

logging.level.org.apache=DEBUG

享受生活 ! :)

解释:问题是因为 Log4j 日志级别没有传播到 JUL(这是嵌入式雄猫使用的实际日志记录方式),因此上述内容实现了与 JUL 和 Log4j 日志级别的这种连接。

参考:在阅读了 Spring boot 1.5.10 发行说明(解决方案不需要)后,我看到了新的文档,它阐明了如何实现它并对其进行了解释:

https://github.com/spring-projects/spring-boot/issues/2923#issuecomment-358451260

我挣扎了很多,没有找到任何帮助。实际上,我已经从我的弹簧启动应用程序中构建了"WAR"。将其部署到 tomcat 实例并 按照以下步骤操作,将所有内部tomcat日志(JULI)日志重定向到我的应用程序日志文件。

  1. 删除现有的 JULI 库(CATALINA_HOME/bin/tomcat-juli.jar 文件)和现有的 Tomcat Java Logging 配置文件 (CATALINA_HOME/conf/logging.properties)。

  2. 从Tomcat下载的Extras部分(http://tomcat.apache.org/download-70.cgi)下载JULI Log4j Tomcat库(tomcat-juli.jar)。将下载的文件放入 CATALINA_HOME/bin 目录。

  3. 从Tomcat下载的附加部分下载Tomcat JULI适配器库(tomcat-juli-adapters.jar)。将此文件放在 CATALINA_HOME/lib 目录中。

  4. 下载 Log4j(版本 1.2 或更高版本),并将下载的库文件放入 CATALINA_HOME/lib 目录。

  5. 在以下位置创建 Log4j 配置文件:CATALINA_HOME/lib/log4j.properties。检查下面与默认 Java 日志记录配置匹配的 log4j 配置。

  6. 重新启动雄猫。

与默认 Tomcat 日志记录设置匹配的 Log4j 配置文件:

log4j.rootLogger=INFO, CATALINA
//Define all the appenders log4j.appender.CATALINA=org.apache.log4j.DailyRollingFileAppender
log4j.appender.CATALINA.File=${catalina.base}/logs/catalina.
log4j.appender.CATALINA.Append=true log4j.appender.CATALINA.Encoding=UTF-8
//Roll-over the log once per day
log4j.appender.CATALINA.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.CATALINA.layout = org.apache.log4j.PatternLayout
log4j.appender.CATALINA.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
log4j.appender.LOCALHOST=org.apache.log4j.DailyRollingFileAppender
log4j.appender.LOCALHOST.File=${catalina.base}/logs/localhost.
log4j.appender.LOCALHOST.Append=true log4j.appender.LOCALHOST.Encoding=UTF-8
log4j.appender.LOCALHOST.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.LOCALHOST.layout = org.apache.log4j.PatternLayout
log4j.appender.LOCALHOST.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
log4j.appender.MANAGER=org.apache.log4j.DailyRollingFileAppender
log4j.appender.MANAGER.File=${catalina.base}/logs/manager.
log4j.appender.MANAGER.Append=true log4j.appender.MANAGER.Encoding=UTF-8
log4j.appender.MANAGER.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
log4j.appender.HOST-MANAGER=org.apache.log4j.DailyRollingFileAppender
log4j.appender.HOST-MANAGER.File=${catalina.base}/logs/host-manager.
log4j.appender.HOST-MANAGER.Append=true log4j.appender.HOST-MANAGER.Encoding=UTF-8
log4j.appender.HOST-MANAGER.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.HOST-MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.HOST-MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Encoding=UTF-8
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
//Configure which loggers log to which appenders
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].
[localhost]=INFO,
LOCALHOST
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].
[localhost].[/manager]=INFO,MANAGER
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].
[localhost].[/host-manager]=
INFO, HOST-
MANAGER

您还可以在 GIT @ 链接上检查可用的适配器

在 Spring 启动应用程序中,您可以进行更改,例如从嵌入式 Tomcat 服务器中添加和删除 jar、文件夹,甚至可以使用TomcatEmbeddedServletContainerFactory.classof Spring boot 向其添加自定义配置文件。

对于 slf4j 和 Spring Boot 2,隐藏 Tomcat 的异常并自行处理:

  • 添加到pom:

    <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jul-to-slf4j</artifactId>
    <version>${slf4j.version}</version>
    </dependency>
    
  • 添加到配置:

    @PostConstruct
    void postConstruct() {
    SLF4JBridgeHandler.install();
    }
    
  • 添加到application.yaml

    logging:
    level:
    org.apache.catalina: off
    
  • ErrorController处理异常

    @Controller
    @Slf4j
    public class ErrorController implements 
    org.springframework.boot.web.servlet.error.ErrorController {
    private static final String ERROR_PATH = "/error";
    @Autowired
    private ErrorAttributes errorAttributes;
    @Override
    public String getErrorPath() {
    return ERROR_PATH;
    }
    @RequestMapping(ERROR_PATH)
    public ModelAndView error(HttpServletRequest request) {
    return processException(errorAttributes.getError(new ServletWebRequest(request)));
    }
    }
    

默认配置为 Java Util Logging、Log4J、Log4J2 和 Logback 提供。在每种情况下,记录器都预先配置为使用控制台输出,还提供可选的文件输出

参考此链接 : https://stackoverflow.com/questions/31939849/spring-boot-default-log-location/31939886

弹簧启动中的嵌入式雄猫在内部将日志回显到控制台。 默认日志配置将在写入消息时将消息回显到控制台。因此,在您按照所述明确指定文件之前,该文件将保留在控制台中。

来自春季引导日志记录文档。

您可以根据需要对日志记录进行控制。

org.apache.catalina.valves.AccessLogValve生成的日志文件,通常命名为localhost_access_log可以像这样配置:

@Configuration
public class EmbeddedTomcatConfig {
@Bean
public TomcatEmbeddedServletContainerFactory containerFactory() {
TomcatEmbeddedServletContainerFactory tomcatEmbeddedServletContainerFactory = new TomcatEmbeddedServletContainerFactory();
AccessLogValve accessLogValve = new AccessLogValve();
// set desired properties like
accessLogValve.setDirectory(...);
tomcatEmbeddedServletContainerFactory.addEngineValves(accessLogValve);
return tomcatEmbeddedServletContainerFactory;
}
}

或者,使用 Spring Boot 2 要好得多:

@Bean
public WebServerFactoryCustomizer<TomcatServletWebServerFactory> customizer() {
return container -> {
AccessLogValve accessLogValve = new AccessLogValve();
// set desired properties like
accessLogValve.setDirectory("...");
container.addEngineValves(accessLogValve);
};
}

最新更新