【问题标题】:How to use NLog in multiple classes如何在多个类中使用 NLog
【发布时间】:2015-10-22 16:26:26
【问题描述】:

我正在学习使用 NLog。我的情况是我想在 DLL 中使用它,可能将它包装在一个日志类中。基本上我的目标是:

1) 我希望这种配置只发生 ONCE

    var config = new LoggingConfiguration();

    var fileTarget = new FileTarget();     
    config.AddTarget("file", fileTarget);

     // Step 3. Set target properties 
     fileTarget.Layout = @"${date:format=HH\:mm\:ss} - ${message}";
     fileTarget.FileName = "c:/myFolder/" + "${date:format=yyyy-MM-dd}.log";

     var rule2 = new LoggingRule("*", LogLevel.Debug, fileTarget);
     config.LoggingRules.Add(rule2);

     // Step 5. Activate the configuration
     LogManager.Configuration = config;

     // Example usage
     _logger = LogManager.GetLogger("Example");

如果相关,我还希望能够将初始化例程的日志文件路径指定为参数。

2) 任何其他类都应该能够调用像 LogWrapper.Log("message") 这样的方法,该方法应该使用我配置的 NLog 对象记录消息 - 我知道 NLog 的哪个方法将条目写入日志文件,即没问题,说它叫_logger.write

我怎样才能以 (thread) 安全的方式实现这一点? 我已经为此苦苦挣扎了一段时间,希望能得到很多帮助!这个应该没那么难吧,基本上我是在问如何使用NLog。

【问题讨论】:

    标签: c# .net multithreading nlog


    【解决方案1】:

    你删除了你之前回答这个问题的问题,所以让我再问一遍,

    对于#1,您需要将此代码放在静态构造函数中

    前;

      static class test
      {
           static test() 
           { /* ... code */}
      }
    

    为了安全起见,您需要一个储物柜;

      static class test
      {
           private static object _locker = new object();
    
           static test() 
           { /* ... code */}
    
            public static void log(string msg)
            {
               lock(_locker )
               { /* ... code */}
            }
      }
    

    【讨论】:

    • 如果我将初始化代码放在静态构造函数中,为什么我需要在日志方法中锁定? NLog 不是已经线程安全了吗?
    • 另外,我可能需要将日志文件路径等参数传递给初始化例程,请也解决这个问题——因为静态构造函数不支持
    • @Quser,对于那个,回到你删除的最初问题,你的答案就在那里,一个带有参数的静态方法将检查它是否被初始化
    • 我将参数传递给该初始化方法?请检查我也问了一些问题
    猜你喜欢
    • 1970-01-01
    • 2011-03-18
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多