(请注意,它比一个Java问题Bash的问题,请参见下面的注释)方法来自动检测错误log4j的静态初始化
当每班配置log4j的,我们做到以下几点:
public class Example {
private static final Logger log = Logger.getLogger(Example.class);
问题是,我们现在有一个中等规模的代码库(200K LOC),包含大量的Java类和...很多错误配置的log4j记录器。
这是因为人们(包括我在内,我承认),的确在这有时会导致傻cut'n'paste:
public class Another {
private static final Logger log = Logger.getLogger(Example.class);
与繁荣,而不必Another.class,这是老Example.class这是留下来,因此错误地出现在日志中(因此导致相当多的头痛)。
我觉得有点奇怪,这种错误配置可能会发生,但它可以和我们现在的主要问题不是它可能发生,但我们必须修复错误记录的记录器。
我们该如何去自动检测这些? (修复可以是手动的,但我想找一种方式来找到log4j配置错误的所有类)。
例如,Bash shell脚本将会非常受欢迎。
- 每一个java文件
- 发现每一个 “类XXX”
- 解析下一个 'X' 线(例如20)
- 是有一个Logger.getLogger(...)线?
- 如果是,它是否与“XXX级”匹配?
- 如果没有报告
假阳性是不是一个问题,所以它不是如果一些虚假的“类XXX”进行解析的问题等
注意:这个问题确实是我们现在有20万行代码,我们希望自动检测违规(修复可以是手动),所以问题不是类似于:
[是否有更好的方式来获取当前类变量在Java ? 1
其实它可能更多的是Bash的问题不是一个Java的问题:)的
在这个最欢迎任何帮助。
+1你的方法很有趣。我没有考虑自动改变类名来使用Factory make方法。不要担心代码:Mercurial/hg到处都是,海量的代码覆盖,单元测试等。同时,我写了一些与Denis发布的内容非常相似的东西,并且它的确行得通。现在我可能会添加工厂并使用您的一个班轮。再一次,不用担心它是Mercurial :) – SyntaxT3rr0r 2010-01-28 14:56:41