Logback使用
Logback其实提供了的是一套完整的日志解决方案,如果只是觉得可以通过SLF4j + Logback-Classic就完事了,那么你把使用logback想的太简单了。
1.获取logback的正确姿势:声明为静态变量。否则每一个类都会通过LoggerFactory获取一个logger实例,这样可能导致logger泛滥,声明为静态变量后,可以实现该类的所有实例共享一个logger;参看logback separate
2.RollingFileAppender正常情况下不要使用prudent属性(或者设置为false),除非你的多个虚拟机写同一个文件,我觉得在真正的项目中这样的场景并不多;Rolling日志生成的理想形式是:生成一个叫做a.log的文件,每长到一定程度之后,将会自动进行重命名,再生成一个a.log的日志文件,以此类推;总是向a.log文件输出的好处是我们可以轻松的根据tail -f a.log来跟踪日志;但是如果你设置prudent为true之后,你就失去了这个遍历,文件管道将会总是输出到新命名的文件中。
3.需要把日志文件设置的大一些,因为logback的rolling机制是重命名当前日志文件,创建一个新的a.log(prudent默认值或者手动设置为false),这意味着文件管道(句柄))发生了变化;所以一旦日志满了,被归档之后,tail -f a.log控制台也就不再输出,除非你再重新定位tail -f a.log,我们项目现在设置为200M(其实还是小)。
4.有的项目日志文件很大,但是都是重要的根据,可以将归档的log进行压缩,方式就是<fileNamePattern>节点中,将文件名称规则最后的后缀名字设置为.gz即可,前面规则不变。参看logback appender;gz的压缩了目测可以达到1:5,空间节省还是很明显的。
5.如果想要把日志的ERROR单独输出,就可以通过在logger节点中添加appender,在appender中指定级别即可,但是logger节点不可以声明level,完全依赖于append自己定义的级别。
6.控制台有的时候回卡顿程序(当输出太猛的时候),其实可以考虑将控制台输出的appender在生产环境关掉;需要跟踪日志,tail -f a.log。