C#Singleton日志记录类

The*_*i.9 6 c# logging singleton thread-safety

我正在尝试找出登录我正在处理的async-IO Web服务器的最佳策略.我认为最简单的方法是使用一个单独的类来保持Filestreams为相应的日志文件打开,所以我可以这样做:

Util.Logger.GetInstance().LogAccess(str);
Run Code Online (Sandbox Code Playgroud)

或类似的东西.

我的班级看起来像这样:

public sealed class Logger {
   private static StreamWriter sw;
   private static readonly Logger instance = new Logger();
   private Logger() {
      sw = new StreamWriter(logfile);
   }
   public static Logger GetInstance() {
      return instance;
   }
   public void LogAccess(string str) {
      sw.WriteLine(str);
   }
}
Run Code Online (Sandbox Code Playgroud)

这一切都在我脑海中,我正在寻找有关如何使其更好的建议,并确保我正确地做到了.最重要的是我需要它是线程安全的,显然它不是当前的状态.不确定最好的方法.

Aar*_*web 8

如果您使用NLog,则会自动为您服务- 您在.config文件中定义所有记录器,然后通过静态LogManager类(Singleton)访问所有记录器.

这是一个说明NLog的线程安全特性的示例:

http://nlog-project.org/wiki/Tutorial#Adding_NLog_to_an_application


Dre*_*ins 5

有一个方法TextWriter.Synchronized,它生成一个线程安全的TextWriter版本.试试吧.