tomcat分割日志以及与logback的区别和注意事项
因为公司之前管理服务器的人的离职, 我们需要接手服务器,但是发现每次服务器的磁盘都被撑爆了,查其原因是因为日志太大, 这不是分割日志的最终原因,最终原因是:像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 “[email protected]” start \ >> “$CATALINA_BASE”/logs/catalina.out 2>&1 &
修改为: org.apache.catalina.startup.Bootstrap “[email protected]” 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中经过上面工具类的转化才可以打印出来.