Java项目可以自己有自己的写log,这是我的常用方案,已经封装好了。但是需要通过命令行或者控制台来修订写log的登记。
一个常用的java开源项目是Log4j。我有个好朋友是做需求的,她说需求的经常骂开发:为什么非要自己造轮子。好吧,她的话是有道理的。项目不仅仅是我的部分,也会涉及其他人,和他们讲了几次问什么要写log,为什么要分等级,如何写log,你们自己开发调测的信息版本释放前应该要去掉,或者设为最低等级,重点是模块的接口界面要清晰,这是定位的关键。
闲话少说,如果没有自己的log,建议使用log4j,但是要使用v2,不要使用v1。v2比v1增加了trace的等级,但是更为关键的是v2可以设置定期读取配置文件,并根据配置文件实时修订。这就非常需要了。如果通过接口定位出问题的模块,下一步程序员入场,可以修改配置,将log的等级调低,不需要重启,就可以进行详细的log输出。处理完毕后,恢复运维的log等级。
另一个也算是比较重要的功能就是可以实现log文件的压缩,txt的压缩率还是相当高,很是方便。
在一个tomcat servlet的项目中,有如下配置:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" monitorInterval="120">
<!-- 每120秒重新load一次配置,以便支持动态配置调整
more detail:http://blog.csdn.net/axwolfer/article/details/40718609
http://logging.apache.org/log4j/2.x/manual/ -->
<properties>
<property name="logPath">/usr/local/bin/tomcat8/apache-tomcat-8.0.24/logs</property>
</properties>
<Appenders>
<!-- 下面Console的配置如果不删除,将导致log同时也写在catalina.out中,这会导致catalina.out非常非常地大,开始以为在Loggers里面删去Console就可以,但是不起作用,将这一并删除就好了。
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%-5p] %c{1}:%L - %msg%n" />
</Console> -->
<RollingFile name="RollingFile" filename="${logPath}/hcz.log"
filepattern="${logPath}/hcz%d{YYYYMMdd}-%i.log.zip">
<!--我们不建议%c{1}:%L,运维人员不关心你这是哪个类和哪行的,这是给程序员定位的,在上线的时候应该删除,如果需要问题定位建议再打开。log是写给什么人看的,这点要清楚 -->
<PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss.SSS} [%-5p] %c{1}:%L - %msg%n" />
<Policies>
<SizeBasedTriggeringPolicy size="20MB"/>
</Policies>
<DefaultRolloverStrategy max="50"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="RollingFile" />
</Root>
</Loggers>
</Configuration>