别给我准备log配置
老婆爱干净,地板每隔一天都要拖一下,我虽没那么爱干净,不过在这样的环境中时间长了,看到肮脏的环境也会感到不愉快。回想起大学时期,宿舍里的各种垃圾,方便面桶、香蕉皮、零食口袋……堆一星期而没人清理,实在是脏乱不堪,不过当时大家也都不以为意。所以人的适应能力是很强的,否则也不会在地球上繁衍70多亿的数量。程序员可能普遍都是爱干净的,然而如果在一个脏乱的环境里待时间长了,对俯拾皆是的小垃圾就会视而不见。
这几日给一个模块写测试,为了能把测试写出来,调整了很多地方,最后测试跑起来了,心情好了不少,这略表不提。我想详细说的是一个几乎不是问题的问题。每次跑完测试,项目根目录下就冒出来一个log.log文件,是项目根目录,不是target/那样专门放生成文件的目录,然后svn st一下,就一个个的问号,烦不胜烦。第一反应自然是找找项目下哪里的log4j.properties乱搞了,于是手工看了几个常见的地方,未果;然后用find grep之类扫一遍项目目录,未果,擦!影响心情有木有?根目录下堂而皇之地冒出来一个文件,我却不知道它哪里来的,被羞辱的感觉有木有?
既然项目里没有,那自然是某个依赖里包了个log4j配置,而且这个配置还说把日志打到log.log中,尼玛,得揪出来。
第一步,把所有依赖解出来,放到一个统一的地方给爷检阅:
$ mvn dependency:unpack-dependencies -Dmdep.useSubDirectoryPerArtifact=true
第二步,扫一下目录,把log4j配置揪出来:
$ find . -type f -regex ".*log4j.*"
进一步的,可以看看配置中包含log.log没有:
$ find . -type f -regex ".*log4j.*" | xargs grep "log.log"
然后,不出所料,发现有两个依赖(不是一个)包含了log4j配置,其中一个生成了log.log,另一个更不靠谱,log文件指向了/home/abc/xxx那样的一般机器上根本不存在的地方去了,只是一直被前一个log配置覆盖,没暴露出来而已。
于是发信告知让这两个包的维护者把log配置干掉,因为发布给别人用的依赖包根本就不应该带有log配置。我自己跑测试的时候,跑应用的时候,日志怎么打是我自己关心的事情,我会自己写配置的。最要命的是,如果别人给我藏了个配置,我很莫名其妙!而且这还是个不合理的配置。
这个问题存在不是一天两天了,通常大家的做法是看到log.log就加一条svn:ignore,这等于看到地上有块香蕉皮就把步子迈大点跨过去,不扯到蛋就没事。然后香蕉皮越积越多,步子越跨越大,蛋总有一天会不保的。而要推行规范化的持续集成,这样的香蕉皮得每天不停地扫,做一次很简单,但要推动一个团队养成这样的习惯,就不是件容易的事情了。
原创文章,转载请注明出处, 本文地址: http://www.juvenxu.com/2013/05/09/dont-prepare-log-config-for-me/








