Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过LINQPad进行NLog-将配置文件放在何处?_C#_.net_Nlog_Linqpad - Fatal编程技术网

C# 通过LINQPad进行NLog-将配置文件放在何处?

C# 通过LINQPad进行NLog-将配置文件放在何处?,c#,.net,nlog,linqpad,C#,.net,Nlog,Linqpad,我想在LINQPad下测试NLog 我成功地链接了它,我的代码编译得很好。但是,NLog不会写入日志文件,因为它没有配置 我试图创建各种配置文件,如:NLog.config和LINQPad.config,但看起来我做得不正确 我在LINQPad下的测试代码是: void Main() { try { int zero = 0; int result = 5 / zero; } catch (DivideByZeroException

我想在LINQPad下测试NLog

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

我试图创建各种配置文件,如:
NLog.config
LINQPad.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>


将配置文件放在哪里?

多亏了@pasty和@nemesv的注释,问题得到了解决

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

日志文件(
logfile.log,在我的例子中为
)显示在同一文件夹中

LINQPad需要对文件夹具有写访问权限才能写入日志文件

设置配置文件后,必须重新启动LINQPad

[编辑]

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


在我的例子中,如果您通过单击保存的代码文件(如
NLog Test.linq
)来运行代码,那么日志文件将显示在代码文件的文件夹中。(
C:\Users\Miroslav\Documents\LINQPad querys
在我的例子中)

您可以使用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,但使用现有配置文件:

public static void ConfigureNLog()
{
    LogManager.Configuration = new XmlLoggingConfiguration(@"C:\path\to\existing\config\file\NLog.xml");
    LogManager.ReconfigExistingLoggers();
}
您需要将以下内容添加到LINQPad查询的命名空间导入中:

NLog
NLog.Config

如果您复制LINQPad.exe旁边的
nlog.config
,并且LINQPad.exe还具有对其文件夹的写访问权限,那么本文可能会帮助您:。您的代码和配置工作正常。因此,如果运行LINQPad.exe,则需要以管理员身份运行或配置Nlog以将日志文件放在其他位置.Hmm。必须重新启动LINQPad才能读取配置文件。然而,到目前为止,这还不是一个解决方案。LINQPad有自己的
LINQPad.exe.config
。我在其中添加了NLog标记,但它不起作用。如果我只使用NLog标记创建一个单独的
LINQPad.config
,LINQPad会警告说找不到它的
标记。@nemesv,你的解决方案有效!问题是我没有重新启动LINQPad。非常有帮助;我能够在IPython中实现这项技术,从工作目录加载配置文件。
NLog
NLog.Config