天天看點

24【線上日志分析】之Tomcat的支援log4j,日志輸出為json格式

1.下載下傳apache-tomcat-7.0.42及解壓

[root@sht-sgmhadoopnn-01 app]# pwd

/root/learnproject/app

[root@sht-sgmhadoopnn-01 app]# tar -xzvf apache-tomcat-7.0.42.tar.gz

2.下載下傳 tomcat-juli.jar and tomcat-juli-adapters.jar

[root@sht-sgmhadoopnn-01 app]# cd apache-tomcat-7.0.42/lib/

3.下載下傳 Download Log4J (Tomcat requires v1.2.x)

4.替換 $CATALINA_HOME/bin/tomcat-juli.jar

[root@sht-sgmhadoopnn-01 lib]# cd ../bin

[root@sht-sgmhadoopnn-01 bin]# mv tomcat-juli.jar tomcat-juli.jar.bak

5.重命名 $CATALINA_BASE/conf/logging.properties to prevent java.util.logging generating zero length log files.

[root@sht-sgmhadoopnn-01 lib]# cd ../conf

[root@sht-sgmhadoopnn-01 conf]# mv logging.properties  logging.properties.bak

[root@sht-sgmhadoopnn-01 conf]#

6.修改conf/context.xml ,将<Context>為<Context swallowOutput="true">

[root@sht-sgmhadoopnn-01 conf]# vi context.xml

<Context swallowOutput="true">

7.建立log4j.properties,其catalina日志為滾動日志,json格式輸出

[root@sht-sgmhadoopnn-01 conf]# cd ../lib

[root@sht-sgmhadoopnn-01 lib]# vi log4j.properties

log4j.rootLogger = INFO, CATALINA

# Define all the appenders

log4j.appender.CATALINA=org.apache.log4j.RollingFileAppender

log4j.appender.CATALINA.File=${catalina.base}/logs/catalina

log4j.appender.CATALINA.layout=org.apache.log4j.PatternLayout

log4j.appender.CATALINA.layout.ConversionPattern={"time":"%d{yyyy-MM-dd HH:mm:ss,SSS}","logtype":"%p","loginfo":"%c:%m"}%n

log4j.appender.CATALINA.MaxFileSize=2MB

log4j.appender.CATALINA.MaxBackupIndex=10

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

8.啟動

[root@sht-sgmhadoopnn-01 apache-tomcat-7.0.42]#

[root@sht-sgmhadoopnn-01 apache-tomcat-7.0.42]# bin/startup.sh

Using CATALINA_BASE:   /root/learnproject/app/apache-tomcat-7.0.42

Using CATALINA_HOME:   /root/learnproject/app/apache-tomcat-7.0.42

Using CATALINA_TMPDIR: /root/learnproject/app/apache-tomcat-7.0.42/temp

Using JRE_HOME:        /usr/java/jdk1.7.0_67-cloudera

Using CLASSPATH:       /root/learnproject/app/apache-tomcat-7.0.42/bin/bootstrap.jar:/root/learnproject/app/apache-tomcat-7.0.42/bin/tomcat-juli.jar

9.檢查日志格式

[root@sht-sgmhadoopnn-01 apache-tomcat-7.0.42]# tail -f ./logs/catalina

{"time":"2017-03-31 21:39:27,137","logtype":"INFO","loginfo":"org.apache.catalina.startup.HostConfig:Deploying web application directory /root/learnproject/app/apache-tomcat-7.0.42/webapps/docs"}

{"time":"2017-03-31 21:39:27,231","logtype":"INFO","loginfo":"org.apache.catalina.startup.HostConfig:Deploying web application directory /root/learnproject/app/apache-tomcat-7.0.42/webapps/ROOT"}

{"time":"2017-03-31 21:39:27,311","logtype":"INFO","loginfo":"org.apache.catalina.startup.HostConfig:Deploying web application directory /root/learnproject/app/apache-tomcat-7.0.42/webapps/manager"}

{"time":"2017-03-31 21:39:27,452","logtype":"INFO","loginfo":"org.apache.catalina.startup.HostConfig:Deploying web application directory /root/learnproject/app/apache-tomcat-7.0.42/webapps/examples"}

{"time":"2017-03-31 21:39:27,864","logtype":"INFO","loginfo":"org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/examples]:ContextListener: contextInitialized()"}

{"time":"2017-03-31 21:39:27,865","logtype":"INFO","loginfo":"org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/examples]:SessionListener: contextInitialized()"}

{"time":"2017-03-31 21:39:27,897","logtype":"INFO","loginfo":"org.apache.coyote.http11.Http11Protocol:Starting ProtocolHandler ["http-bio-8080"]"}

{"time":"2017-03-31 21:39:27,922","logtype":"INFO","loginfo":"org.apache.coyote.ajp.AjpProtocol:Starting ProtocolHandler ["ajp-bio-8009"]"}

{"time":"2017-03-31 21:39:27,929","logtype":"INFO","loginfo":"org.apache.catalina.startup.Catalina:Server startup in 1828 ms"}

【備注】

log4j 的PatternLayout參數含義速查:

<a href="http://www.programgo.com/article/64053566088/">http://www.programgo.com/article/64053566088/</a>

log4j.appender.CATALINA.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %p %c:%m%n

%d{yyyy-MM-dd HH:mm:ss,SSS} : 輸出日期。允許使用%d{yyyy-MM-dd HH:mm:ss}格式化日期

%p: 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL

%c: 輸出Logger所在的類别(即Logger的名字)。允許使用%c{數字}輸出部分的名稱(從右邊往左邊數)

%m: 輸出代碼中指定的消息

%n: 輸出一個回車換行符,Windows平台為“\r\n”,Unix平台為“\n”

%l: 輸出日志事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main(TestLog4.java: 10 )

下載下傳及參照:

<a href="https://archive.apache.org/dist/logging/log4j/1.2.17/">https://archive.apache.org/dist/logging/log4j/1.2.17/</a>

<a href="http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.42/bin/extras/">http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.42/bin/extras/</a>

<a href="https://tomcat.apache.org/tomcat-7.0-doc/logging.html">https://tomcat.apache.org/tomcat-7.0-doc/logging.html</a>

<a href="http://anthrax2.iteye.com/blog/2295857">http://anthrax2.iteye.com/blog/2295857</a>

<a href="http://blog.csdn.net/hbsong75/article/details/39432811">http://blog.csdn.net/hbsong75/article/details/39432811</a>