Это плохая практика использовать имя метода в качестве параметра для регистратора при печати журналов? - PullRequest
0 голосов
/ 22 апреля 2019

Является ли хорошей идеей напечатать имя метода в журнале, определив имя метода в виде строки в производственном процессе, как показано ниже?

private void foo() {
    String methogTag = "foo"; // here defining method name
    int updateCount = // db update operation
    log.info("{} : {} record/s are updated", methogTag, updateCount);

    int deleteCount = // db delete operation
    log.info("{} : {} record/s are deleted", methogTag, deleteCount);
}

вывод журнала:

2019-04-22 13:24:41.572 ClazzName - foo : 20 record/s are updated
2019-04-22 13:24:41.600 ClazzName - foo : 12 record/s are deleted

Мы можем получить имя метода, напечатанное в журналах, используя %M в log4j шаблонном макете.

макет шаблона:

%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%t] %c{3.}%M - %msg%n

И в документации log4j есть предупреждение

ПРЕДУПРЕЖДЕНИЕ Генерация информации о местоположении вызывающего абонента является чрезвычайно медленной и ее следует избегать, если скорость выполнения не является проблемой.

Или есть какой-нибудь альтернативный способ получить имя метода в регистраторах без каких-либо затрат памяти?

Спасибо.

1 Ответ

0 голосов
/ 22 апреля 2019

В Junit есть способ получить имя метода, не сохраняя его ни в какой переменной.

Junit5 TestInfo Class

Если я прав, вы не пишете контрольные примеры, просто какая-то логика Вместо того, чтобы хранить имя метода, вы можете получить его, используя

Thread.currentThread()
      .getStackTrace()[1]
      .getMethodName();

Но зачем хранить каждое имя метода, выполняемое в лог-файлах, лучше всего распечатывать трассировку стека при возникновении любого исключения Таким образом, в stackTrace вы можете получить не только номер строки в методе, где произошло исключение, но и поток относительно того, как был выполнен метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...