如果我想在c ++或java中构建logger类,它应该是单一的还是静态的

use*_*898 4 c++ logging singleton static

一般的问题是我喜欢构建logger类,从我的应用程序中的不同类写入单个日志文件,logger类应该是单线程还是静态类

jal*_*alf 8

是什么让你觉得它应该是?那些可以根据需要实例化的常规非静态类呢?然后将其中的一个静态实例用作默认记录器.通过这种方式,您可以获得两全其美:方便的全局访问记录器以及测试它或临时使用不同记录器的能力.

另一个建议是简单地创建一个单独的实例,并将其作为参数传递给您的类的每个组件,如@disown所示.

但是如果你让这个课程本身是静态的或是一个单身人士,你只是在自己的脚下射击.

编辑
示例,以回应@ Stephen的评论:

// define a logger class, a perfectly ordinary class, not a singleton, and without all static members
class Logger {
 // ....
};

// create a single global *instance* of this class
Logger defaultLog;

void foo() {
  // and now use the globally visible instance
  defaultLog.Log("hello");

  // or create a new one if that's what we need:
  Logger newlog;
  newlog.Log("hello");
}
Run Code Online (Sandbox Code Playgroud)

没有魔力.这正是标准库的功能.std::cout不是单身人士.它只是一个类的全局实例std::ostream,一个类也可以在需要时正常实例化.