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

来源:互联网 发布:php跳转代码 编辑:程序博客网 时间:2024/06/13 06:38

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

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

     logback.xml:

    <configuration>
  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>../logs/logback.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
      <fileNamePattern>../logs/logback.%i.log.zip</fileNamePattern>
      <minIndex>1</minIndex>
      <maxIndex>60</maxIndex>
    </rollingPolicy>


    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
      <maxFileSize>10MB</maxFileSize>
    </triggeringPolicy>
    <encoder>
      <pattern>%date{YYYY-MM-dd HH:mm:ss} %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
    </encoder>
  </appender>


  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%date{YYYY-MM-dd HH:mm:ss} %level %logger{10} [%file:%line] %msg%n</pattern>
    </encoder>
  </appender>


  <root level="INFO">
    <appender-ref ref="FILE" />
    <appender-ref ref="STDOUT" />
  </root>


  <logger name="***" level="DEBUG" additivity="true"></logger>
  <!-- <logger name="org.hibernate" level="DEBUG" additivity="false"> <appender-ref ref="STDOUT" /> </logger> -->
</configuration>

上面的意思是:对于整个项目我们采用标准的输出格式(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即可.

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



上面说完后,下面还需要说一下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中经过上面工具类的转化才可以打印出来.


原创粉丝点击