NLog通过LINQPad - 在哪里放置配置文件?

时间:2014-06-03 20:27:27

标签: c# .net nlog linqpad

我试图在LINQPad下测试NLog。

我成功链接了它,我的代码编译得很好。但是,NLog不会写日志文件,因为它没有配置。

我尝试制作各种配置文件,例如:NLog.configLINQPad.config,但看起来我没有正确执行。

我在LINQPad下的测试代码是:

void Main()
{
    try
    {
        int zero = 0;
        int result = 5 / zero;
    }
    catch (DivideByZeroException ex)
    {
        Logger logger = LogManager.GetCurrentClassLogger();
        logger.ErrorException("Whoops!", ex);
    }
}

配置代码:

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <targets>
        <target name="logfile" xsi:type="File" fileName="logfile.log" />
    </targets>

    <rules>
        <logger name="*" minlevel="Info" writeTo="logfile" />
    </rules>
</nlog>

在哪里放置配置文件?

3 个答案:

答案 0 :(得分:9)

您可以使用LinqPad的扩展来启用日志记录:您将放弃到My Extensions脚本的所有内容都可用于其他每个脚本。

使用内容添加到My Extensions的课程:

public static class NLogLinqPadExtensions
{
    public static void ConfigureLogging()
    {
                var nlogConfig = @"
<nlog>
    <targets>
    <target name='console' type='Console' layout='${date:format=dd/MM/yy HH\:mm\:ss\:fff} | ${level:uppercase=true} | ${message} | ${exception:format=tostring}' />
    </targets>
    <rules>
    <logger name='*' minlevel='Debug' writeTo='console' />
    </rules>
</nlog>
        ";

        using (var sr = new StringReader(nlogConfig))
        {
            using (var xr = XmlReader.Create(sr))
            {
                NLog.LogManager.Configuration = new XmlLoggingConfiguration(xr, null);
                NLog.LogManager.ReconfigExistingLoggers();
            }
        }
    }
}

不要忘记将NLog包添加到此脚本中。

此示例配置控制台记录器 - 您将在LinqPad的“结果”窗口中看到您的日志消息,这对于长时间运行的进程和实用程序脚本来说非常酷。

要启用日志记录,您必须从脚本中调用此扩展程序。创建一个新的LinqPad脚本并尝试:

NLogLinqPadExtensions.ConfigureLogging();

var logger = LogManager.GetLogger("Foo");
logger.Debug("Hi");

答案 1 :(得分:4)

感谢@pasty和@nemesv评论,问题已修复。

配置文件必须命名为 NLog.config ,并且必须放在LINQPad.exe文件夹中。

日志文件(在我的情况下为logfile.log)出现在同一文件夹中。

LINQPad需要对该文件夹的写访问权才能写入日志文件。

设置配置文件后,

LINQPad 必须重新启动

<强> [编辑]

如果启动LINQPad,加载或编写代码并运行它,日志文件将显示在LINQPad.exe文件夹中。

如果在我的情况下通过单击保存的代码文件NLog Test.linq来运行代码,则日志文件将显示在代码文件的文件夹中。 (在我的情况下C:\Users\Miroslav\Documents\LINQPad Queries

答案 2 :(得分:0)

作为Valeriu Caraulean's answer中提供的解决方案的次要替代方案,您可以添加如下方法来配置NLog但使用现有配置文件:

public static void ConfigureNLog()
{
    LogManager.Configuration = new XmlLoggingConfiguration(@"C:\path\to\existing\config\file\NLog.xml");
    LogManager.ReconfigExistingLoggers();
}

您希望将以下内容添加到LINQPad查询的命名空间导入中:

NLog
NLog.Config