tomcatログをjsonに記録
7896 ワード
この文書のTomcatバージョンは8.0.36です.
まず、開発したビジネスログは、開発をjson形式にするか、Logstashを使用して解析するかで、印刷されたログを開発する基準が異なるため、汎用的な製品が完成することはできないことを明らかにします.ここで変更したのはtomcat自体のログフォーマットだけです.
tomcat自身のログは次のとおりです.
catalina.outにはtomcat自体と印刷を開発するアプリケーションログが含まれており、議論はしない.
Tomcatログのアクセスログはserver.xmlではjson形式で構成するのも便利ですが、他のログではjson形式で構成するのは不便です.これらのログについてtomcatは、デフォルトの
まずtomcatログの記録をlog 4 jに変更し、修正する方法をここにします.これは公式ドキュメントの翻訳で、公式ドキュメントを直接見ることもできます.
次の点に注意してください. log 4 jのjarパッケージは必ず1.2である.Xバージョンのものは、最新版をダウンロードしないでください. 例の
すべてのjarパッケージはhttps://mvnrepository.com/ここでダウンロードします.
公式に与えられたlog 4 jを変更しなければ.propertiesのログ記録フォーマットでは、構成に成功するとtomcat/logs/catalinaの出力と前のcatalina.out同じです.次はLogstashが提供するプラグインを使いますが、これはどう使いますか?簡単です.まず、上に示すmaven倉庫にjarパッケージ(1.6版が望ましい)をダウンロードし、tomcat/libディレクトリの下に入れ、log 4 jを変更します.properties:
直接効果を得るために、ログ・レベルを
tomcat/libディレクトリの下に次のパッケージをダウンロードする必要があります.
そしてapiでロゴに効果が表示されます.
まず、開発したビジネスログは、開発をjson形式にするか、Logstashを使用して解析するかで、印刷されたログを開発する基準が異なるため、汎用的な製品が完成することはできないことを明らかにします.ここで変更したのはtomcat自体のログフォーマットだけです.
tomcat自身のログは次のとおりです.
catalina.2018-01-05.log
host-manager.2018-01-05.log
localhost.2018-01-05.log
manager.2018-01-05.log
localhost_access_log.2018-01-05.log
catalina.outにはtomcat自体と印刷を開発するアプリケーションログが含まれており、議論はしない.
Tomcatログのアクセスログはserver.xmlではjson形式で構成するのも便利ですが、他のログではjson形式で構成するのは不便です.これらのログについてtomcatは、デフォルトの
java.util.logging
とlog4j
の2つのレコードを提供します.デフォルトの方法はjsonとして記録できません(少なくとも私は方法を見つけていません)、log 4 jを通じて、Logstashがプラグインを提供しているためです.まずtomcatログの記録をlog 4 jに変更し、修正する方法をここにします.これは公式ドキュメントの翻訳で、公式ドキュメントを直接見ることもできます.
次の点に注意してください.
log4j.properties
で指定するログファイルは、catalinaではなくcatalinaである.out. すべてのjarパッケージはhttps://mvnrepository.com/ここでダウンロードします.
公式に与えられたlog 4 jを変更しなければ.propertiesのログ記録フォーマットでは、構成に成功するとtomcat/logs/catalinaの出力と前のcatalina.out同じです.次はLogstashが提供するプラグインを使いますが、これはどう使いますか?簡単です.まず、上に示すmaven倉庫にjarパッケージ(1.6版が望ましい)をダウンロードし、tomcat/libディレクトリの下に入れ、log 4 jを変更します.properties:
log4j.rootCategory=WARN, RollingLog
log4j.appender.RollingLog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.RollingLog.Threshold=TRACE
log4j.appender.RollingLog.File=api.log
log4j.appender.RollingLog.DatePattern=.yyyy-MM-dd
log4j.appender.RollingLog.layout=net.logstash.log4j.JSONEventLayoutV1
直接効果を得るために、ログ・レベルを
INFO
に変更できます.このときそのまま使うと、次のようなエラーが発生します.Using CATALINA_BASE: /tmp/tomcat
Using CATALINA_HOME: /tmp/tomcat
Using CATALINA_TMPDIR: /tmp/tomcat/temp
Using JRE_HOME: /usr/local/jdk1.7.0_79
Using CLASSPATH: /tmp/tomcat/bin/bootstrap.jar:/tmp/tomcat/bin/tomcat-juli.jar
log4j:WARN Error during default initialization
java.lang.NoClassDefFoundError: org/apache/commons/lang/time/FastDateFormat
at net.logstash.log4j.JSONEventLayoutV0.(JSONEventLayoutV0.java:36)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at java.lang.Class.newInstance(Class.java:379)
at org.apache.log4j.helpers.OptionConverter.instantiateByClassName(OptionConverter.java:336)
at org.apache.log4j.helpers.OptionConverter.instantiateByKey(OptionConverter.java:123)
at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:764)
at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:735)
at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:615)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:502)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:547)
at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:483)
at org.apache.log4j.LogManager.(LogManager.java:127)
at org.apache.log4j.Logger.getLogger(Logger.java:104)
at org.apache.juli.logging.impl.Log4JLogger.getLogger(Log4JLogger.java:262)
at org.apache.juli.logging.impl.Log4JLogger.(Log4JLogger.java:108)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.apache.juli.logging.impl.LogFactoryImpl.createLogFromClass(LogFactoryImpl.java:1025)
at org.apache.juli.logging.impl.LogFactoryImpl.discoverLogImplementation(LogFactoryImpl.java:844)
at org.apache.juli.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:541)
at org.apache.juli.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:292)
at org.apache.juli.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:269)
at org.apache.juli.logging.LogFactory.getLog(LogFactory.java:657)
at org.apache.catalina.startup.Catalina.(Catalina.java:820)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at java.lang.Class.newInstance(Class.java:379)
at org.apache.catalina.startup.Bootstrap.init(Bootstrap.java:268)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:455)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang.time.FastDateFormat
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 36 more
tomcat/libディレクトリの下に次のパッケージをダウンロードする必要があります.
commons-lang-2.4
json-smart-1.1.1
junit-4.8.1
そしてapiでロゴに効果が表示されます.
{"@fields":{"level":"INFO","threadName":"localhost-startStop-1","mdc":{},"file":"HostConfig.java","class":"org.apache.catalina.startup.HostConfig","line_number":"1143","method":"deployDirectory","loggerName":"org.apache.catalina.startup.HostConfig"},"@timestamp":"2018-01-05T01:36:38.263Z","@message":"Deployment of web application directory \/tmp\/tomcat\/webapps\/manager has finished in 64 ms","@source_host":"SUC-IAS-JOB-02.UAT"}
{"@fields":{"level":"INFO","threadName":"main","mdc":{},"file":"AbstractProtocol.java","class":"org.apache.coyote.AbstractProtocol","line_number":"471","method":"start","loggerName":"org.apache.coyote.http11.Http11NioProtocol"},"@timestamp":"2018-01-05T01:36:38.265Z","@message":"Starting ProtocolHandler [\"http-nio-9021\"]","@source_host":"SUC-IAS-JOB-02.UAT"}
{"@fields":{"level":"INFO","threadName":"main","mdc":{},"file":"AbstractProtocol.java","class":"org.apache.coyote.AbstractProtocol","line_number":"471","method":"start","loggerName":"org.apache.coyote.ajp.AjpNioProtocol"},"@timestamp":"2018-01-05T01:36:38.270Z","@message":"Starting ProtocolHandler [\"ajp-nio-8009\"]","@source_host":"SUC-IAS-JOB-02.UAT"}
{"@fields":{"level":"INFO","threadName":"main","mdc":{},"file":"Catalina.java","class":"org.apache.catalina.startup.Catalina","line_number":"642","method":"start","loggerName":"org.apache.catalina.startup.Catalina"},"@timestamp":"2018-01-05T01:36:38.272Z","@message":"Server startup in 695 ms","@source_host":"SUC-IAS-JOB-02.UAT"}