【发布时间】:2016-09-13 18:39:40
【问题描述】:
我正在为我的记录器使用 NLog。当我运行 .exe 或什至通过 Visual Studio 进行调试时,一切正常,NLog 仍将写入文件。
但是,如果我运行一个通过单元测试调用记录器的对象,则该文件已创建但它是空的。是否需要在配置中添加额外的设置/规则才能让 NLog 写入单元测试下的文件?
我可以为此模拟 NLog 而没有日志转储,但我想看看在我决定只模拟 NLog 之前是否可以让它工作。尽管这仅发生在单元测试中并且可以正常工作,但这是我的日志配置和代码。我省略了文件名。
public static void Info(string app, string m) => EngineLogger.Logger.Info($"{app} : {m}");
<targets>
<target name="infoFile"
xsi:type="File"
layout="${date:format=yyyy-MM-dd HH\:mm\:ss} ${pad:padding=5:inner=${level:uppercase=true}} ${logger} ${message}"
fileName="leftoutForQuestion"
keepFileOpen="false"
encoding="iso-8859-2" />
<target name="errorFile"
xsi:type="File"
layout="${date:format=yyyy-MM-dd HH\:mm\:ss} ${pad:padding=5:inner=${level:uppercase=true}} ${logger} ${message}"
fileName="leftOutForQuestion"
keepFileOpen="false"
encoding="iso-8859-2" />
</targets>
<rules>
<logger name="*" minlevel="Debug" maxlevel="Info" writeTo="infoFile" />
<logger name="*" minlevel="Warn" maxlevel="Fatal" writeTo="errorFile" />
</rules>
这是来自内部日志的错误:
Error Error has been raised. Exception: System.Runtime.InteropServices.COMException (0x800700A1): The specified path is invalid. (Exception from HRESULT: 0x800700A1)
at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
at NLog.Internal.FileAppenders.BaseFileAppender.WindowsCreateFile(String fileName, Boolean allowFileSharedWriting)
at NLog.Internal.FileAppenders.BaseFileAppender.TryCreateFileStream(Boolean allowFileSharedWriting)
at NLog.Internal.FileAppenders.BaseFileAppender.CreateFileStream(Boolean allowFileSharedWriting)
at NLog.Internal.FileAppenders.RetryingMultiProcessFileAppender.Write(Byte[] bytes)
at NLog.Targets.FileTarget.WriteToFile(String fileName, LogEventInfo logEvent, Byte[] bytes, Boolean justData)
at NLog.Targets.FileTarget.ProcessLogEvent(LogEventInfo logEvent, String fileName, Byte[] bytesToWrite)
at NLog.Targets.FileTarget.Write(LogEventInfo logEvent)
at NLog.Targets.Target.Write(AsyncLogEventInfo logEvent)
【问题讨论】:
-
你检查过 nlog 的内部日志文件是否有错误吗?还发现这个链接可能是同样的问题:stackoverflow.com/questions/1672998/nlog-with-vs-2008-unit-test
-
我也试过了,但同样的问题仍然存在。使用正确的文件名创建文件,但文件为空。 D=
-
你为什么登录到文件目标而不是内存目标?
-
因为它有效?我不确定该定位如何导致它仅在单元测试下中断?同样,如果我只是运行一个 exe,那么日志记录会遇到零问题。除非我在这里遗漏了什么......谢谢
标签: c# visual-studio unit-testing nlog