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

8

我正在尝试在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>

配置文件应该放在哪里?


1
也许这篇文章能帮到你:http://coding.infoconex.com/post/2012/06/01/Getting-LINQPad-to-read-your-applications-AppConfig-settings。 - keenthinker
1
你的代码和配置很好用,只要将 nlog.config 复制到 LINQPad.exe 旁边,并且确保 LINQPad.exe 对它所在的文件夹有写入权限。因此,如果你正在运行 LINQPad.exe,你需要以管理员身份运行或者配置 Nlog 将日志文件放在其他地方。 - nemesv
嗯。必须重新启动LINQPad才能读取配置文件。但是这并不是一个解决方案。LINQPad有自己的LINQPad.exe.config。我在其中添加了NLog标记,但它不起作用。如果我只使用NLog标记创建一个单独的LINQPad.config,LINQPad会警告找不到其<configuration>标记。 - Miroslav Popov
@nemesv,你的解决方案有效!问题在于我没有重新启动LINQPad。 - Miroslav Popov
3个回答

12
你可以使用LinqPad的扩展功能来启用日志记录:你将放置在“我的扩展”脚本中的所有内容都将对其他脚本可用。
将一个类添加到“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");

非常有帮助;我能够在IPython中实现这个技巧,从工作目录加载配置文件。 - Mike C

4
感谢@pasty和@nemesv的评论,问题已经解决。
配置文件必须命名为NLog.config,并且必须放置在LINQPad.exe文件夹中。
日志文件(在我的情况下是logfile.log)出现在同一文件夹中。
为了写入日志文件,LINQPad需要对该文件夹具有写访问权限。
设置配置文件后,必须重新启动LINQPad。
[编辑]
如果您启动LINQPad,加载或编写代码并运行它,则日志文件将出现在LINQPad.exe文件夹中。
如果您通过单击保存的代码文件(例如,在我的情况下为NLog Test.linq)来运行代码,则日志文件将出现在代码文件的文件夹中。(在我的情况下为C:\Users\Miroslav\Documents\LINQPad Queries

2
作为对 Valeriu Caraulean 的答案 提供的解决方案的一个次要替代方案,您可以添加以下方法来配置 NLog,但使用现有的配置文件:
public static void ConfigureNLog()
{
    LogManager.Configuration = new XmlLoggingConfiguration(@"C:\path\to\existing\config\file\NLog.xml");
    LogManager.ReconfigExistingLoggers();
}

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

NLog
NLog.Config

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接