(请注意,这更像是 Bash 问题,而不是 Java 问题,请参阅下面的注释)
在每个类中配置log4j时,我们执行以下操作:
public class Example {
private static final Logger log = Logger.getLogger( Example.class );
问题是我们现在有一个中等规模的代码库(200K LOC),其中包含大量 Java 类和......相当多的配置错误的 log4j 记录器。
这是因为人们(包括我,我承认)做了愚蠢的剪切和粘贴,有时会导致以下结果:
public class Another {
private static final Logger log = Logger.getLogger( Example.class );
繁荣,而不是有另类,这是旧的示例.class这是留下来的,因此错误地出现在日志中(因此引起了相当多的头痛)。
我觉得这种错误配置可能发生有点奇怪,但它确实可能发生,我们现在的主要问题不是它可能发生,而是我们必须修复错误配置的记录器。
我们怎样才能自动检测这些呢? (修复可以是手动的,但我想要一种方法来查找 log4j 配置错误的所有类)。
例如,Bash shell 脚本就非常受欢迎。
- 对于每个 .java 文件
- 查找每个“XXX 类”
- 解析接下来的 'x' 行(比如 20)
- 有 Logger.getLogger(...) 行吗?
- 如果是,是否匹配“XXX类”?
- 如果没有报告
误报不是问题,因此如果解析一些伪造的“XXX 类”等,也不是问题。
NOTE:问题实际上是我们现在有 200 000 行代码,我们希望自动检测违规行为(可以手动修复),因此问题与以下内容不同:
【java中有没有更好的方法获取当前类变量?1 https://stackoverflow.com/questions/2151167/is-there-a-better-way-to-get-the-current-class-variable-in-java
实际上,这可能更像是 Bash 问题,而不是 Java 问题:)
欢迎对此提供任何帮助。