我们在所有服务/实用程序类(spring singleton beans)中记录了Log4j / commons的“private static final”实例。
我想知道是否有任何合理的情况让这些对象“静态最终”如果(1)没有使用它的静态方法(2)类是单例?
我假设在单个对象的静态实例或非静态属性中 - 这将是JVM的相同的旧生成对象。另外我认为JVM可以很容易地识别一个对象,如果它是私有的,并且永远不会因任何性能目的而改变(如果有的话)。
这是对的吗?
谢谢!
答案 0 :(得分:3)
我个人总是创建一个private static final Logger LOGGER = LogManager.getLogger();
作为我创建的任何类的第一行(Spring bean,DAO,内部类,域对象等)。 LogManager充当我的各个Logger对象的工厂:
我非常关注这一点,以至于我在Eclipse下的项目设置实际上会在我创建类时生成该行。
创建记录器时,它引用要登录的名称或类,上面引用的工厂方法创建了包含它的特定类的记录器。
当您想要调整log4j配置时,这种做法非常有用。您可以在不同级别添加高度或低级别的记录器或路由到不同的文件。你可以用这个框架做很多事情。
至于私人静态决赛,我的理由如下:
希望这有帮助! :)
答案 1 :(得分:1)
制作记录器static
和final
是一种常见的习惯用法,并且很容易开始进行代码审核。"标准"记录器节出现了。我认为没有理由偏离单身中的成语,但你是正确的,它只会在单身人士的情况下创建一个logger
。