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