tomcat分割日志以及与logback的区别和注意事项

       因为公司之前管理服务器的人的离职, 我们需要接手服务器,但是发现每次服务器的磁盘都被撑爆了,查其原因是因为日志太大, 这不是分割日志的最终原因,最终原因是:像tomcat中我们用于输出的catalina.out 文件太大.不利于我们后续产品上线 出现问题,进行快速的定位, 从几个G的日志里进行操作是一件很痛苦的事情,所以我决定对tomcat进行日志分割;

      首先说到日志系统,我们自己的程序里有一套日志系统,  tomcat自带的有一套日志系统, 像我的系统里的日志是logback, 我们把logback.xml进行配置, 系统就会根据你的配置, 进行日志的管理, 我把我现在正在用的logback.xml 代码贴上来,仅供参考;

     logback.xml:

    
 
    ../logs/logback.log
   
      ../logs/logback.%i.log.zip
      1
      60
   



   
      10MB
   

   
      %date{YYYY-MM-dd HH:mm:ss} %level [%thread] %logger{10} [%file:%line] %msg%n
   

 



 
   
      %date{YYYY-MM-dd HH:mm:ss} %level %logger{10} [%file:%line] %msg%n
   

 



 
   
   
 



 
 

上面的意思是:对于整个项目我们采用标准的输出格式(STDOUT), 如果日志过多,也就是俗称滚动日志(RollingFileAppender),我们会进行压缩分割, 每天产生的日志大于等于10M就进行压缩(SizeBasedTriggeringPolicy), 而且这个压缩的日志最多存60个.

上面的截图是保存在tomcat下面的,压缩文件显示不是10M但是解压出来是10M;

除了系统上使用的日志系统,tomcat自己还有自己的日志系统;

但是我们分割日志,需要做的就是要把catalina.out进行每天分割;

我们需要先安装cronolog-1.6.2.tar; 地址:链接: https://pan.baidu.com/s/1dE20WQd 密码: 3vjf

安装步骤是:

 ./configure
    make
    make install

我们进入tomcat-->bin  找到catalina.sh

vi catalina.sh

找到org.apache.catalina.startup.Bootstrap “$@” start  \ >> “$CATALINA_BASE”/logs/catalina.out 2>&1 & 

修改为: org.apache.catalina.startup.Bootstrap “$@” start 2>&1 \ 
| /usr/local/sbin/cronolog “$CATALINA_BASE”/logs/catalina.%Y-%m-%d.out >> /dev/null & 

重启tomcat即可.

最后贴图,我们现在分割后的:

tomcat分割日志以及与logback的区别和注意事项_第1张图片


上面说完后,下面还需要说一下logback应该注意的点:

   我们可以通过设置logback.xml配置文件进行控制日志,他也会生成日志文件供我们看日志的信息,但是像我们常用的Excepiton.printStackTrace();就不会打印在logback.log文件中,引用别人的话: " e.printStackTrace();通常我们都会去这样找到出错的信息,而打印的出错的信息栈,因为会输出到std.err中,所以在我们自己定义的日志文件中是不能够找到的,为了解决这个问题,可以通过如下代码解决:"

代码如下:  这个是个工具类

  public class LogException {
   
public static String getStack(Throwable t) {
StringWriter sw = null;
PrintWriter pw = null;
try {
sw = new StringWriter();
pw = new PrintWriter(sw);
t.printStackTrace(pw);
pw.flush();
sw.flush();
} finally {
if (sw != null) {
try {
sw.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
if (pw != null) {
pw.close();
}
}

return sw.toString();
}
}

e.printStackTrace()栈信息是不会输出到logback.log中经过上面工具类的转化才可以打印出来.

tomcat分割日志以及与logback的区别和注意事项_第2张图片

你可能感兴趣的:(tomcat分割日志以及与logback的区别和注意事项)