简体   繁体   English

Spring启动嵌入式tomcat日志

[英]Spring boot embedded tomcat logs

i'm using spring boot embedded tomcat with spring boot 1.5.9 , im also using Log4j2. 我正在使用spring boot嵌入式tomcat和spring boot 1.5.9,我也使用Log4j2。

recently i exerience problems during load, so i want to understand better the tomcat logs [Not the access Logs] , i tried (in application.properties) : 最近我加载期间的exerience问题,所以我想更好地了解tomcat日志[不是访问日志],我试过(在application.properties中):

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

but none of the above worked. 但上述都没有奏效。 is there any other way to achieve it ? 有没有其他方法来实现它?

Found it !! 找到了 !! You are now able to see the internal Logs of Embedded Tomcat in your App's Log4j log file with 3 easy steps: 您现在可以通过3个简单的步骤在App的Log4j日志文件中查看嵌入式Tomcat的内部日志:

1] add to your pom: 1]加入你的pom:

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

2] add to your running arg a new JVM param , eg: 2]为你的运行arg添加一个新的JVM参数,例如:

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

3] add to your application.properties: 3]添加到您的application.properties:

logging.level.org.apache=DEBUG

Enjoy Life ! 享受生活! :) :)

Explaination: the problem is because Log4j log levels is not propagated into JUL (which is the actual Logging way Embedded tomcat use) so the above achieves this connection with JUL and Log4j log levels. 解释:问题是因为Log4j日志级别没有传播到JUL(这是嵌入式tomcat使用的实际日志记录方式)所以上面实现了与JUL和Log4j日志级别的这种连接。

Reference: After reading the Spring boot 1.5.10 release notes (which is not required for the solution) i saw the new documentation that shed light how to achive it and explaination about it: 参考:在阅读了Spring boot 1.5.10发行说明(解决方案不需要)后,我看到了新的文档,阐明了如何实现它并解释它:

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

I struggled a lot,and didnt find anything of my help.Utlimately I had build "WAR" out of my spring boot application.Deploy it to tomcat instance and followed below steps,which redirected all the internal tomcat logs(JULI) logs to my application log file. 我挣扎了很多,并没有发现任何我的帮助。我刚从Spring启动应用程序中构建了“WAR”。将它部署到tomcat实例并按照以下步骤操作,将所有内部tomcat日志(JULI)日志重定向到我的应用程序日志文件

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

  2. Download JULI Log4j Tomcat library (tomcat-juli.jar) from the Tomcat downloads' Extras section ( http://tomcat.apache.org/download-70.cgi ). 从Tomcat下载'Extras部分( http://tomcat.apache.org/download-70.cgi )下载JULI Log4j Tomcat库(tomcat-juli.jar)。 Place the downloaded file to CATALINA_HOME/bin directory. 将下载的文件放在CATALINA_HOME / bin目录中。

  3. Download Tomcat JULI adapters library (tomcat-juli-adapters.jar) from the Tomcat downloads' Extras section. 从Tomcat下载'Extras部分下载Tomcat JULI适配器库(tomcat-juli-adapters.jar)。 Place this file in the CATALINA_HOME/lib directory. 将此文件放在CATALINA_HOME / lib目录中。

  4. Download Log4j (version 1.2 or later), and place the downloaded library file to CATALINA_HOME/lib directory. 下载Log4j(版本1.2或更高版本),并将下载的库文件放在CATALINA_HOME / lib目录中。

  5. Create the Log4j configuration file at the following location: CATALINA_HOME/lib/log4j.properties. 在以下位置创建Log4j配置文件:CATALINA_HOME / lib / log4j.properties。 Check below log4j configuration matching the default Java Logging configuration. 检查下面的log4j配置是否与默认的Java Logging配置相匹配。

  6. Restart Tomcat. 重启Tomcat。

Log4j configuration File Matching the Default Tomcat Logging Settings: Log4j配置文件匹配默认Tomcat日志记录设置:

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

You can also check a adapter avaiable on GIT @ link 您还可以检查GIT @ link 上的适配器

In your spring boot application,you can make changes like adding and removing jars,folder from embedded Tomcat server Or even adding custom config files to it using TomcatEmbeddedServletContainerFactory.class ,of spring boot. 在Spring启动应用程序中,您可以进行更改,例如添加和删除嵌入式Tomcat服务器中的jar文件夹,甚至可以使用Spring启动的TomcatEmbeddedServletContainerFactory.class向其添加自定义配置文件。

Please refer to this url which contains common application properties which also includes application logging properties and tomcat level logging properties. 请参阅此URL ,其中包含常见的应用程序属性,其中还包括应用程序日志记录属性和tomcat级别日志记录属性。 Whether you use yaml or properties file, spring boot uses this configuration to bootstrap the application. 无论您使用yaml还是属性文件,spring boot都使用此配置来引导应用程序。 Search for below configuration items. 搜索以下配置项。

# LOGGING
logging.config= # Location of the logging configuration file. For instance `classpath:logback.xml` for Logback
logging.exception-conversion-word=%wEx # Conversion word used when logging exceptions.
logging.file= # Log file name. For instance `myapp.log`
logging.level.*= # Log levels severity mapping. For instance `logging.level.org.springframework=DEBUG`
logging.path= # Location of the log file. For instance `/var/log`
logging.pattern.console= # Appender pattern for output to the console. Only supported with the default logback setup.
logging.pattern.file= # Appender pattern for output to the file. Only supported with the default logback setup.
logging.pattern.level= # Appender pattern for log level (default %5p). Only supported with the default logback setup.
logging.register-shutdown-hook=false # Register a shutdown hook for the logging system when it is initialized.

server.tomcat.accept-count= # Maximum queue length for incoming connection requests when all possible request processing threads are in use.
server.tomcat.accesslog.buffered=true # Buffer output such that it is only flushed periodically.
server.tomcat.accesslog.directory=logs # Directory in which log files are created. Can be relative to the tomcat base dir or absolute.
server.tomcat.accesslog.enabled=false # Enable access log.
server.tomcat.accesslog.file-date-format=.yyyy-MM-dd # Date format to place in log file name.
server.tomcat.accesslog.pattern=common # Format pattern for access logs.
server.tomcat.accesslog.prefix=access_log # Log file name prefix.
server.tomcat.accesslog.rename-on-rotate=false # Defer inclusion of the date stamp in the file name until rotate time.
server.tomcat.accesslog.request-attributes-enabled=false # Set request attributes for IP address, Hostname, protocol and port used for the request.
server.tomcat.accesslog.rotate=true # Enable access log rotation.
server.tomcat.accesslog.suffix=.log # Log file name suffix.
server.tomcat.additional-tld-skip-patterns= # Comma-separated list of additional patterns that match jars to ignore for TLD scanning.
server.tomcat.background-processor-delay=30 # Delay in seconds between the invocation of backgroundProcess methods.
server.tomcat.basedir= # Tomcat base directory. If not specified a temporary directory will be used.
server.tomcat.internal-proxies=10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}|\\
        192\\.168\\.\\d{1,3}\\.\\d{1,3}|\\
        169\\.254\\.\\d{1,3}\\.\\d{1,3}|\\
        127\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}|\\
        172\\.1[6-9]{1}\\.\\d{1,3}\\.\\d{1,3}|\\
        172\\.2[0-9]{1}\\.\\d{1,3}\\.\\d{1,3}|\\
        172\\.3[0-1]{1}\\.\\d{1,3}\\.\\d{1,3} # regular expression matching trusted IP addresses.
server.tomcat.max-connections= # Maximum number of connections that the server will accept and process at any given time.
server.tomcat.max-http-post-size=0 # Maximum size in bytes of the HTTP post content.
server.tomcat.max-threads=0 # Maximum amount of worker threads.
server.tomcat.min-spare-threads=0 # Minimum amount of worker threads.
server.tomcat.port-header=X-Forwarded-Port # Name of the HTTP header used to override the original port value.
server.tomcat.protocol-header= # Header that holds the incoming protocol, usually named "X-Forwarded-Proto".
server.tomcat.protocol-header-https-value=https # Value of the protocol header that indicates that the incoming request uses SSL.
server.tomcat.redirect-context-root= # Whether requests to the context root should be redirected by appending a / to the path.
server.tomcat.remote-ip-header= # Name of the http header from which the remote ip is extracted. For instance `X-FORWARDED-FOR`
server.tomcat.uri-encoding=UTF-8 # Character encoding to use to decode the URI.

Default configurations are provided for Java Util Logging, Log4J, Log4J2 and Logback. 为Java Util Logging,Log4J,Log4J2和Logback提供了默认配置。 In each case loggers are pre-configured to use console output with optional file output also available 在每种情况下,记录器都预先配置为使用控制台输出,并且还提供可选的文件输出

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

The embedded tomcat in spring boot internally echoes logs to console. spring boot中的嵌入式tomcat在内部将日志回显给控制台。 The default log configuration will echo messages to the console as they are written. 默认日志配置将在写入时将消息回显给控制台。 So until you explicitly specify a file as you described, it stays in the Console. 因此,在您按照描述明确指定文件之前,它将保留在控制台中。

From the spring boot logging doc . spring boot logging doc

You can custmize the logging as per your need. 您可以根据需要保留日志记录。

嵌入式tomcat的包是org.springframework.boot.context.embedded.tomcat所以将它添加到你的application.properties文件中

logging.level.org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer=INFO

For slf4j and Spring Boot 2 hide exceptions from Tomcat and handle them by yourself: 对于slf4j和Spring Boot 2,可以隐藏Tomcat中的异常并自行处理:

  • Add to pom: 加入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 添加到application.yaml

     logging: level: org.apache.catalina: off 
  • Handle exception in ErrorController 处理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))); } } 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM