我已经在几个控制台应用程序上使用NLog,没有任何问题,但这是我第一次在MVC Web应用程序中使用它。当我尝试登录到文件时,没有任何反应。没有错误,也没有创建任何日志文件。当我在本地浏览应用程序时,我也不会收到任何错误。NLog不在MVC应用程序中创建日志?
我做的第一件事是确认我的NLog.config文件的属性在“复制到输出”属性中设置为“始终复制”。我甚至通过NuGet卸载了NLog,然后再次安装它,并关闭VS并再次打开项目。
我已经做了一些搜索,我发现的唯一真正建议是先创建文件夹位置,然后检查应用程序池的权限。我创建了文件夹位置,但似乎也没有工作。我通过Visual Studio 2015中的Debug模式运行它,它自动启动本地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);
}
在调试模式中本地IIS实例使用您的当前登录的应用程序池的用户,所以想必你有权写入到指定的文件夹,但也许值得一检查 –
也可以尝试切换'/'来' '\\'' –
请参阅http://stackoverflow.com/questions/23729629/why-is-the-basedir-nlog-configuration-not-working/23736348#23736348 –