关于使用NLog的一些问题

时间:2015-10-21 20:22:32

标签: c# nlog

我安装了Nlog并随后进行了配置

    public static Logger _logger = null;

    static void foo()
    { 
        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");
        _logger.Error("error log message");

    }

但我想问一些问题。

  1. 我将从DLL中使用NLog。如果许多不同的程序使用我的DLL,写入日志文件仍然安全吗?当不同的程序试图通过NLog写入同一个日志文件时,会不会有比赛?

  2. 在整个DLL中使用Logger类型的单个静态变量是否可以?

  3. 是否可以在我的DLL中使用NLog,以便使用DLL的应用程序可以配置为输出到不同的日志文件?怎么实现呢?换句话说,正如我所说,我的DLL正在使用NLog。假设我的DLL有方法foo,它使用NLog写入日志文件。现在,当有人想使用我的DLL时,他们可以指定NLog应该写入的文件夹。现在,当其他程序开始使用我的DLL时,我希望它们能够指定要写入的其他文件夹。你有看到?所以程序A写入文件夹C:使用我的DLL但程序B写入文件夹D:同时使用我的DLL。

1 个答案:

答案 0 :(得分:0)

  1. Refer to Nlog's documentations多个进程可以写入同一个文件,Nlog可以处理。您也可以通过concurrentWrites属性来控制它。

  2. 据我所知,代码Nlog在您调用LogManager.GetLogger()方法时最好返回同一个记录器实例。

  3. 如果您希望每个进程都有单独的日志文件,只需使用FileName

    上的变量

    fileTarget.FileName = "c:/myFolder/${processid}/${date:format=yyyy-MM-dd}.log"

    fileTarget.FileName = "c:/myFolder/${processname}/${date:format=yyyy-MM-dd}.log"

  4. 但是如果您希望您的用户可以更改日志路径,您可以将路径保存在应用相关文件中,并在每次需要时将其设置为fileTarget.FileName

    // imagine this method returns "c:/myPath"
    string logFolderPath = AskPathFromUser();
    
    // since your logPath.txt file is app relative. 
    // each process will have own file next to process file. 
    File.WriteAllText("logPath.txt", logFolderPath);
    
    // now every time you need to set the path read the saved path from file
    fileTarget.FileName=Path.Combine(File.ReadAllText("logPath.txt"),"${date:format=yyyy-MM-dd}.log");