我试图在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>
在哪里放置配置文件?
答案 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