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,日志分割生效