我目前正在为一些网络监控工具开发一个 java 应用程序。在我的代码中,我应该经常使用日志记录。由于它是一个网络管理软件,日志中的信息对用户非常有用,因此必须使用它们。但是现在我对我应该更喜欢哪种记录器方法有点困惑。现在我正在使用Logger.lop(...//...)
因为在它的帮助下,我们还记录了类名和方法,因此我(开发人员)调试代码和查找错误变得非常容易。但最后我很困惑我是否应该使用相同的日志记录机制将它交付给最终用户???让您的用户知道当前正在执行哪种类,发生了哪种方法错误是否有任何危害。我在许多产品中多次看到异常处理堆栈跟踪被使用,所以通常我们也会得到类名。那么让最终用户知道您的类名和方法是什么没有问题吗?
问问题
2139 次
3 回答
7
在考虑它的安全影响之前,请考虑性能。在大多数日志系统中,通过日志工具动态获取实际的类名和方法名需要反射并显着减慢日志记录——通常是同步操作。我的猜测是,在网络监控应用程序中,您真的不希望这样。
如果您将方法名称硬编码到日志消息中(通过使其成为消息的一部分或按类别),那就另当别论了。作为一名安全人员,我认为这没什么大不了的——如果你的代码是用 Java 编写的,无论如何它都可以反转,所以你的代码应该以这样一种方式运行,即使代码是安全的被送走了。
话虽如此,您可以为开发和生产使用不同的日志记录配置,或者这些细粒度消息可以进入调试、跟踪等。如果您使用的是 log4j,通常建议使用isDebugEnabled
包装任何日志记录语句其中包括动态计算的任何内容,因为在记录语句确定是否启用之前计算这些内容。
于 2011-09-02T13:36:52.900 回答
1
值得一提的是,这种日志记录在 Java 中的性能成本很高,这与通常使用预处理器实现的 C++ 相反。幸运的是,使用 log4j/logback 你可以打开和关闭它——听从 Bozho 的建议。
于 2011-09-02T14:34:42.493 回答