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