(обратите внимание, что это вопрос 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 );
И бум, вместо того, чтобы иметь Другой.класс , это старый Пример.класса , который остается и, следовательно, ошибочно появляется в журналах (что вызывает немало головных болей).
Я нахожу довольно странным, что такая неправильная конфигурация может произойти, но это возможно, и наша главная проблема сейчас не в том, что это может произойти, а в том, что мы должны исправить неправильно настроенные регистраторы.
Как мы можем автоматически обнаруживать их? (исправление может быть ручным, но я хотел бы найти способ найти все классы, в которых log4j настроен неправильно).
Сценарий Bash, например, будет очень кстати.
- для каждого файла .java
- найти каждый "класс XXX"
- разбирать следующие строки 'x' (скажем, 20)
- есть ли строка Logger.getLogger (...)?
- если да, соответствует ли он "классу XXX"?
- если нет отчета
Ложное срабатывание не является проблемой, поэтому не проблема, если несколько поддельных "классов XXX" проанализированы и т. Д.
ПРИМЕЧАНИЕ : проблема в том, что у нас теперь есть 200 000 строк кода, и мы хотели бы обнаружить нарушение автоматически (исправление может быть ручным), поэтому вопрос не похож на:
[Есть ли лучший способ получить текущую переменную класса в Java? 1
На самом деле это скорее вопрос Bash, чем вопрос Java:)
Любая помощь в этом наиболее приветствуется.