私はSpring Boot 1.5.9でSpring Embedded Embedded Tomcatを使用していますが、Log4j2も使用しています。
最近、ロード中に問題が発生したため、Tomcatのログ[アクセスログではなく]をよりよく理解したい(application.propertiesで)試しました:
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 paramを追加します。例:
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(Embedded Tomcatが使用する実際のロギング方法)に伝播されないため、上記はこの接続を実現します。 JULおよびLog4jのログレベル。
参考:Spring boot 1.5.10リリースノートを読んだ後(これはソリューションには必要ありません)、達成方法を明らかにする新しいドキュメントを見ましたそれとそれについての説明:
https://github.com/spring-projects/spring-boot/issues/2923#issuecomment-35845126
私は多くの苦労をしましたが、私の助けは何も見つかりませんでした。最終的には、スプリングブートアプリケーションから "WAR"を作成しました。Tomcatインスタンスにデプロイし、以下の手順に従って、すべての内部Tomcatログ(JULI)ログをアプリケーションログファイル。
既存のJULIライブラリー(CATALINA_HOME/bin/Tomcat-juli.jarファイル)および既存のTomcat Javaロギング構成ファイル(CATALINA_HOME/conf/logging.properties))を削除します。
TomcatダウンロードのエクストラセクションからJULI Log4j Tomcatライブラリ(Tomcat-juli.jar)をダウンロードします( http://Tomcat.Apache.org/download-70.cgi )。ダウンロードしたファイルをCATALINA_HOME/binディレクトリに配置します。
Tomcatダウンロードの追加セクションからTomcat JULIアダプターライブラリ(Tomcat-juli-adapters.jar)をダウンロードします。このファイルをCATALINA_HOME/libディレクトリに配置します。
Log4j(バージョン1.2以降)をダウンロードし、ダウンロードしたライブラリファイルをCATALINA_HOME/libディレクトリに配置します。
次の場所にLog4j構成ファイルを作成します:CATALINA_HOME/lib/log4j.properties。デフォルトのJavaロギング構成と一致する以下のlog4j構成を確認してください。
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
スプリングブートアプリケーションでは、jar、埋め込みTomcatサーバーのフォルダーの追加や削除、またはスプリングブートのTomcatEmbeddedServletContainerFactory.classを使用してカスタム構成ファイルを追加するなどの変更を行うことができます。
Java Util Logging、Log4J、Log4J2、およびLogbackのデフォルト構成が提供されます。それぞれの場合、オプションのファイル出力も使用可能なコンソール出力を使用するようにロガーが事前構成されます。
このリンクを参照してください: https://stackoverflow.com/questions/31939849/spring-boot-default-log-location/31939886
スプリングブートに組み込まれたTomcatは、ログをコンソールに内部的にエコーします。デフォルトのログ構成では、メッセージが書き込まれるとコンソールにエコーされます。したがって、説明したようにファイルを明示的に指定するまで、コンソールに残ります。
必要に応じてロギングをカスタマイズできます。
これを参照してください rl これには、アプリケーションロギングプロパティとTomcatレベルロギングプロパティを含む一般的なアプリケーションプロパティが含まれています。 yamlまたはプロパティファイルのどちらを使用する場合でも、スプリングブートはこの設定を使用してbootstrap=アプリケーション。以下の設定項目を検索します。
# 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.
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;
}
}
埋め込みTomcatのパッケージはorg.springframework.boot.context.embedded.Tomcat
なので、これをapplication.propertiesファイルに追加します
logging.level.org.springframework.boot.context.embedded.Tomcat.TomcatEmbeddedServletContainer=INFO
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)));
}
}