我在几个控制台应用程序上使用NLog没有任何问题,但这是我第一次在MVC Web应用程序上使用它。当我尝试登录文件时没有任何反应。没有错误,也没有创建任何日志文件。当我在本地浏览应用程序时,我也没有出现任何错误。
我做的第一件事是确认我的NLog.config文件的属性在“复制到输出”属性中设置为“始终复制”。我甚至通过NuGet卸载了NLog,然后再次安装它以及关闭VS并再次打开项目。
我做了一些搜索,我发现的唯一真正的建议是首先创建文件夹位置,然后检查应用程序池上的权限。我创建了文件夹位置,但似乎也没有用。我在Visual Studio 2015中通过调试模式运行它,它会自动启动本地Web服务器,因此我不知道如何找出它用于写入文件位置的服务。
在下面的例子中,我可以在我的控制器内的ActionResult上设置一个断点,并在“gate”参数中看到一个值。我继续测试记录器并且没有任何错误。我查看我的日志位置,没有创建日志文件。
任何人对我可以尝试的内容有任何建议吗?
NLog.config文件
<?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"
autoReload="true"
throwExceptions="true">
<variable name="LogDirBase" value="D:/logs/RampInfo"/>
<variable name="LogYear" value="${date:format=yyy}"/>
<variable name="LogMonth" value="${date:format=MM}"/>
<variable name="LogDay" value="${date:format=dd}"/>
<variable name="LogFileShortDate" value="${date:format=yyyy-MM-dd}"/>
<targets>
<target name="DefaultTarget"
xsi:type="File"
fileName="${LogDirBase}/${LogFileShortDate}.log"
encoding="utf-8"
layout="${longdate} | ${callsite} | ${message}"
maxArchiveFiles="14"
/>
</targets>
<rules>
<logger name="defaultLogger" minlevel="Debug" writeTo="DefaultTarget" />
</rules>
</nlog>
我的控制器
public class RampController : Controller
{
private static Logger logger = LogManager.GetCurrentClassLogger();
// GET: GateInfo
public ActionResult Gate(string gate)
{
logger.Debug("Start action result. Gate: " + gate);
}
答案 0 :(得分:0)
记录器名称通常使用类似
的内容<logger name="Name.Space.RampController" minlevel="Debug" writeTo="DefaultTarget" />
或者,如果您只想为您的应用程序提供一个日志文件:
<logger name="*" minlevel="Debug" writeTo="DefaultTarget" />
在内部,LogManager.GetCurrentClassLogger
查看当前堆栈以确定调用类型:(已删除silverlight条件):
public new T GetCurrentClassLogger()
{
StackFrame frame = new StackFrame(1, false);
return this.GetLogger(frame.GetMethod().DeclaringType.FullName);
}
答案 1 :(得分:-1)
我感谢大家的建议。我花了好几个小时试图找出NLog无法正常工作的原因。我放弃了这一天,今天早上以一种清新的心态回到了它。我基本上重新开始使用全新的NLog.config并且工作正常。我从不同的项目中复制了不同的NLog配置。我真的没有看到两者之间的区别,但无论哪种方式,它现在都按预期工作。
这是我使用的新NLog.config。
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
autoReload="true"
throwExceptions="true">
<variable name="LogDirectory" value="D:\integration\logs\RampInfo"/>
<targets>
<target name="LogTarget"
xsi:type="File"
fileName="${LogDirectory}/${shortdate}.log"
encoding="utf-8"
maxArchiveFiles="14"
layout="${longdate} ${callsite} ${message}" />
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="LogTarget" />
</rules>
</nlog>