可以在java产品中记录源类名和方法名吗?

amo*_*mod 3 java logging error-logging end-user

我目前正在为一些网络监控工具开发java应用程序.在我的代码中,我应该使用很多日志.由于它是一个网络管理软件,因此日志中的信息对用户非常有用,因此必须使用它们.但是现在我对我应该选择什么样的记录器方法感到困惑.现在我正在使用,Logger.lop(...//...)因为在它的帮助下我们也记录了类名和方法,因此我(开发人员)很容易调试代码并找到错误.但最后我很困惑,如果我用相同的日志记录机制将它交付给最终用户??? 让您的用户知道当前正在执行哪种类,以及发生了哪种方法错误是否有害.我在很多产品中看到很多次异常处理堆栈跟踪被使用,所以通常我们也得到类名.那么让最终用户知道你的类名和方法是没有问题的吗?

Boz*_*zho 7

log4j/logback/slf4j允许您为不同的appender使用不同的格式.对于开发,您可以启用控制台appender,其中包含格式的类名,而对于最终用户,您可以省略它(对于文件appender)

  • 问你的用户.对我来说还好. (3认同)

Col*_*law 6

在考虑其安全隐患之前,请考虑性能.在大多数日志记录系统中,日志记录工具动态获取实际的类名和方法名称需要反射并大大减慢日志记录 - 通常是同步操作.我的猜测是,在网络监控应用程序中,你真的不希望这样.

如果您将方法名称硬编码到日志消息中(通过将其作为消息的一部分或按类别),那就是另一个故事.作为一个安全人员,我不认为这是一个大问题 - 如果你的代码是用Java编写的,它无论如何都可以反转,所以你的代码应该以这样的方式运行,即使代码也是安全的被送走了.

总而言之,您可以使用不同的日志记录配置进行开发和生产,或者那些细粒度的消息可以进入调试,跟踪等.如果您使用的是log4j,通常建议使用isDebugEnabled包装任何日志记录语句其中包括动态计算的任何内容,这些内容在日志记录语句确定是否已启用之前计算得到.