通过在下面的生产中将方法名称定义为字符串来在日志中打印方法名称是个好主意吗?
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
中有一个警告
警告:生成呼叫者位置信息的速度非常慢,除非执行速度不成问题,否则应避免。
或者,有没有其他方法可以在记录器中获取方法名称而又没有任何内存开销?
谢谢。
答案 0 :(得分:0)
在Junit中,有一种方法可以获取方法名称而不将其存储在任何变量中。
如果我是对的,那么您不是在编写测试用例,请遵循一些逻辑 不用存储方法名称,您可以使用
Thread.currentThread()
.getStackTrace()[1]
.getMethodName();
但是为什么要将每个正在执行的方法名称存储在日志文件中,最佳实践是在发生任何异常时打印堆栈跟踪信息 因此,在stackTrace中,您不仅可以获取发生异常的方法中的行号,还可以获取有关方法执行方式的流程。