tomcat共享jar包-日志輸出問題


tomcat下包括多個項目,並且可以多個項目共享一些相同的jar,將公用的jar包放在/shared/lib中,並且在conf/catalina.properties中配置一下就可以。

但是這樣出現了日志路徑混亂的問題,這是因為log4j.jar所引起的

1、log4j.jar存在於每個工程的lib下
當tomcat啟動時,使用的是工程各自路徑下的log4j.jar包來加載每個工程自己的log4j.properties(這個文件在工程的classes目錄中),
這時每個項目輸出的日志是按照log4j.properties中配置的路徑來輸出。

2、每個工程的lib目錄下不存在log4j.jar文件,統一調用tomcat的 /shared/lib 目錄下的log4j.jar

這種情況下多個工程的log4j.properties一次被加載,但是后加載的會覆蓋前面加載的配置內容
導致所有的工程的log都輸出在最后加載的工程的log4j.properties中設定的log文件中。

解決辦法:所有的工程的日志配置也放在在同一個log4j.properties文件中,不需要再每個工程中存在log4j.properties文件

將這個log4j.properties文件放到某一個工程的classes目錄中
例如:tomcat下部署了bgapi和report兩個項目,

一個簡單的log4j.properties配置如下:

log4j.rootlogger=info log4j.addivity.org.apache=true //是否追加寫入 #CONSOLE #log4j.category.com=INFO,console //category已被放棄 log4j.logger.com=INFO,console log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.Threshold=DEBUG log4j.appender.console.Target=System.out log4j.appender.console.Encoding=UTF8 #PatternLayout布局就要指定的打印信息的具體格式 log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern= %d - %c -%-4r [%t] %-5p %x - %m%n # bgapi的項目log輸出配置,每天生成一個文件 log4j.logger.com.bgapi=DEBUG,bgapi log4j.appender.bgapi=org.apache.log4j.DailyRollingFileAppender log4j.appender.bgapi.File=/usr/local/bgapi/log log4j.appender.bgapi.Encoding=UTF8 log4j.appender.bgapi.Threshold=DEBUG log4j.appender.bgapi.DatePattern=yyyy-MM-dd'.log' log4j.appender.bgapi.layout=org.apache.log4j.PatternLayout log4j.appender.bgapi.layout.ConversionPattern= %d - %c -%-4r [%t] %-5p %x - %m%n # report項目的log輸出配置 log4j.logger.com.report=DEBUG, report log4j.appender.report.file=/usr/local/report/log log4j.appender.report.=org.apache.log4j.RollingFileAppender #文件的最大尺寸 log4j.appender.report.MaxFileSize=500kb #最大記錄文件數, N(這里為10)天前的會被刪除 log4j.appender.report.MaxBackupIndex=10 log4j.appender.report.layout=org.apache.log4j.PatternLayout log4j.appender.report.layout.ConversionPattern=%d{mm/dd hh:mm:ss.sss} %-5p %c %m%n

 

使用說明如下:
對於bgapi項目中的類,package必須以 com.bgapi 開頭
如:Test類,日志調用 private static Logger logger = LogManager.getLogger(Test.class);
或者:static Logger loggerError = Logger.getLogger("com.bgapi");

report的功能的package以 com.report開頭
或者:static Logger loggerError = Logger.getLogger("com.report");

所以我們在每個項目在開發時,最好在com開頭,且不重名的package名區分,這樣才能區分輸出日志時針對的工程

 

Tomcat8中Catalina.out日志分割

 tomcat默認情況下catalina.out日志文件沒有按日期進行分割的,而是全部輸出全部寫到了一個文件中, 我們可以采用cronolog來完成日志分割。

 安裝cronolog

下載: cronolog-1.6.2.tar.gz   下載地址: https://github.com/fordmason/cronolog/ 

[root@xzkj-huanan2 download]# tar -zxvf cronolog-1.6.2.tar.gz

[root@xzkj-huanan2 download]# cd cronolog-1.6.2

[root@xzkj-huanan2 cronolog-1.6.2]# ./configure --prefix=/usr/local/cronolog1.6.2/ 

[root@xzkj-huanan2 cronolog-1.6.2]# make && make install

執行完成后cronolog的安裝目錄是  /usr/local/cronolog1.6.2/sbin/   中

修改tomcat中的 bin/catalina.sh文件 標紅的部分是修改過的內容。

1:輸入的文件名修改 , 大概在210行

if [ -z "$CATALINA_OUT" ] ; then
  CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out
fi 

修改:

if [ -z "$CATALINA_OUT" ] ; then
  CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out.%Y-%m-%d
fi

 

2: 修改之前:

  shift
touch "$CATALINA_OUT" if [ "$1" = "-security" ] ; then if [ $have_tty -eq 1 ]; then echo "Using Security Manager" fi shift eval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \ -Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\"" \ -Djava.security.manager \ -Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \ -Dcatalina.base="\"$CATALINA_BASE\"" \ -Dcatalina.home="\"$CATALINA_HOME\"" \ -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \ org.apache.catalina.startup.Bootstrap "$@" start \ >> "$CATALINA_OUT" 2>&1 "&" else eval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \ -Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\"" \ -Dcatalina.base="\"$CATALINA_BASE\"" \ -Dcatalina.home="\"$CATALINA_HOME\"" \ -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \ org.apache.catalina.startup.Bootstrap "$@" start \ >> "$CATALINA_OUT" 2>&1 "&" fi

修改之后:

  shift # touch "$CATALINA_OUT"
  if [ "$1" = "-security" ] ; then
    if [ $have_tty -eq 1 ]; then
      echo "Using Security Manager"
    fi
    shift eval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \ -Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\"" \ -Djava.security.manager \ -Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \ -Dcatalina.base="\"$CATALINA_BASE\"" \ -Dcatalina.home="\"$CATALINA_HOME\"" \ -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \ org.apache.catalina.startup.Bootstrap "$@" start 2>&1 | /usr/local/cronolog1.6.2/sbin/cronolog "$CATALINA_OUT" >> /dev/null & 

   else eval "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \ -Djava.endorsed.dirs="\"$JAVA_ENDORSED_DIRS\"" -classpath "\"$CLASSPATH\"" \ -Dcatalina.base="\"$CATALINA_BASE\"" \ -Dcatalina.home="\"$CATALINA_HOME\"" \ -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \ org.apache.catalina.startup.Bootstrap "$@" start 2>&1 | /usr/local/cronolog1.6.2/sbin/cronolog "$CATALINA_OUT" >> /dev/null & 
     
  fi

重啟tomcat,日志分割生效

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM