我正在使用Spring Boot 1.5.9嵌入式Tomcat,并且还在使用Log4j2。
最近我在加载过程中遇到了问题,因此我想更好地了解Tomcat日志[不是访问日志],我尝试了(在application.properties中):
logging.level.org.apache.tomcat: INFO
logging.level.org.apache.catalina: INFO
但以上方法都没有成功,还有其他实现方式吗?
我正在使用Spring Boot 1.5.9嵌入式Tomcat,并且还在使用Log4j2。
最近我在加载过程中遇到了问题,因此我想更好地了解Tomcat日志[不是访问日志],我尝试了(在application.properties中):
logging.level.org.apache.tomcat: INFO
logging.level.org.apache.catalina: INFO
但以上方法都没有成功,还有其他实现方式吗?
找到了!! 您只需三个简单步骤就可以在应用程序的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] 将以下内容添加到application.properties文件中:
logging.level.org.apache=DEBUG
享受生活!:)
说明:问题是由于Log4j日志级别没有传递到JUL(这是嵌入式Tomcat使用的实际日志记录方式),因此上述代码实现了JUL和Log4j日志级别之间的连接。
参考资料:阅读Spring Boot 1.5.10版本发布说明后,我看到了新文档,解释了如何实现它以及其说明:
https://github.com/spring-projects/spring-boot/issues/2923#issuecomment-358451260
我很努力地尝试了很多,但没有找到任何有用的东西。最终,我使用我的Spring Boot应用程序构建了“WAR”文件。将其部署到Tomcat实例并按照以下步骤操作,将所有内部Tomcat日志(JULI)重定向到我的应用程序日志文件中。
删除现有的JULI库(CATALINA_HOME/bin/tomcat-juli.jar文件)和现有的Tomcat Java日志配置文件(CATALINA_HOME/conf/logging.properties)。
从Tomcat下载的Extras部分(http://tomcat.apache.org/download-70.cgi),下载JULI Log4j Tomcat库(tomcat-juli.jar)。将下载的文件放置在CATALINA_HOME/bin目录中。
从Tomcat下载的Extras部分,下载Tomcat JULI适配器库(tomcat-juli-adapters.jar)。将此文件放置在CATALINA_HOME/lib目录中。
下载Log4j(版本1.2或更高版本),并将下载的库文件放置在CATALINA_HOME/lib目录中。
在以下位置创建Log4j配置文件:CATALINA_HOME/lib/log4j.properties。检查下面的log4j配置是否与默认的Java Logging配置匹配。
重新启动Tomcat。
与默认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上检查可用的适配器 @ link
在你的Spring Boot应用程序中,你可以进行更改,比如从嵌入式Tomcat服务器中添加和删除jar、文件夹,甚至使用Spring Boot的TomcatEmbeddedServletContainerFactory.class添加自定义配置文件。
如果您正在使用slf4j和Spring Boot 2,并希望隐藏来自Tomcat的异常并自行处理,可以执行以下操作:
Add to pom:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<version>${slf4j.version}</version>
</dependency>
Add to config:
@PostConstruct
void postConstruct() {
SLF4JBridgeHandler.install();
}
Add to application.yaml
logging:
level:
org.apache.catalina: off
Handle exception in 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://dev59.com/qFwZ5IYBdhLWcg3wBcWz#31939886
Spring Boot中的嵌入式Tomcat会将日志内部回显到控制台。默认的日志配置将按照编写顺序将消息回显到控制台。因此,在您明确指定文件之前,它将保留在控制台中。
您可以根据需要自定义日志记录。
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);
};
}
org.apache.logging.log4j:log4j-jul
的依赖项,因为它将由org.springframework.boot:spring-boot-starter-log4j2
添加。 - Behrang