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一次配置,以便支持动态配置调整 
          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>