3

我知道无状态 bean 不保持会话状态,但我需要的只是一个记录器。我应该在每个被调用的方法中获取记录器吗?如果没有,那么我应该在哪里初始化它?

这是肯定的,如果我编写这样的代码,我不会在使用记录器的某些方法中得到 NullPointerException 吗?

 @PostConstruct
 public void init() {
   logger = Logger.getLogger();
 }
4

3 回答 3

1

我猜你不希望有一个特定于请求/会话的记录器,对吧?在这种情况下,您甚至可以使用静态类成员来添加记录器并让所有 bean 实例使用相同的记录器。

于 2012-04-18T15:05:16.003 回答
0

创建一个具有以下属性的单例类:

  1. 具有类本身类型的静态字段
  2. 私有构造函数,以确保仅启动此记录器类的一个实例
  3. getInstance()方法将给出该类的唯一实例
  4. getLogger()获取记录器的方法

在该类的构造函数中初始化记录器,
每次需要使用时都可以从getLogger()方法中获取记录器

于 2012-04-18T15:11:03.597 回答
0

尝试:

private static final Logger log = Logger.getLogger();

如果您需要线程特定的值,请注意 Logger 的输出处理程序在每一行中写入线程名称,您应该没问题。

于 2012-04-18T15:21:35.640 回答