Я использую NLog для своего регистратора. Все работает нормально при регистрации при запуске .exe или даже отладки через Visual Studio, NLog все равно будет записывать в файл.NLog and Unit Testing
Но если я запустил объект, который вызывает регистратор с помощью теста Unit, файл создается, но он пуст. Есть ли дополнительная настройка/правило, которые мне нужно добавить в конфигурацию, чтобы 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 на наличие ошибок? также нашел эту ссылку, которая может быть той же проблемой: http://stackoverflow.com/questions/1672998/nlog-with-vs-2008-unit-test – rlee
Я тоже это пробовал, но эта же проблема все еще происходит. Файл создается с правильным именем файла, но файл пуст. D = – TheNoob
Зачем вы входите в файл filetarget, а не в memorytarget? – Julian