Я работаю над проектом ASP. NET на основе NLog TraceWriter (NLogTraceWriter)
. Ведение журнала работало нормально, пока я не добавил конфигурацию для синхронизации c логов в Elasti c Поиск. В настоящее время я получаю следующее исключение при запуске сайта из диспетчера IIS
Метод 'Трассировка' в типе 'XXXXXXXX.App_Start.NLogTraceWriter' из сборки 'XXXXXXXX, Версия = 1.0.0.0, Культура = нейтральная, PublicKeyToken = null 'не имеет реализации
Ниже приведен мой класс TraceWriter: NLogTraceWriter.cs
public class NLogTraceWriter : ITraceWriter
{
private static readonly Logger classLogger = LogManager.GetCurrentClassLogger();
private static readonly Lazy<Dictionary<TraceLevel, Action<string>>> loggingMap =
new Lazy<Dictionary<TraceLevel, Action<string>>>(() => new Dictionary<TraceLevel, Action<string>>{
{TraceLevel.Info, classLogger.Info},
{TraceLevel.Debug, classLogger.Debug},
{TraceLevel.Error, classLogger.Error},
{TraceLevel.Fatal, classLogger.Fatal},
{TraceLevel.Warn, classLogger.Warn}
});
private Dictionary<TraceLevel, Action<string>> Logger
{
get { return loggingMap.Value; }
}
public void Trace(HttpRequestMessage request, string category, TraceLevel level, Action<TraceRecord> traceAction)
{
if (level != TraceLevel.Off)
{
var record = new TraceRecord(request, category, level);
traceAction(record);
Log(record);
}
}
private void Log(TraceRecord record)
{
var message = new StringBuilder();
if (record.Request != null)
{
if (record.Request.Method != null)
message.Append(record.Request.Method);
if (record.Request.RequestUri != null)
message.Append(" ").Append(record.Request.RequestUri);
}
if (!string.IsNullOrWhiteSpace(record.Category))
message.Append(" ").Append(record.Category);
if (!string.IsNullOrWhiteSpace(record.Operator))
message.Append(" ").Append(record.Operator).Append(" ").Append(record.Operation);
if (!string.IsNullOrWhiteSpace(record.Message))
message.Append(" ").Append(record.Message);
if (record.Exception != null && !string.IsNullOrWhiteSpace(record.Exception.GetBaseException().Message))
message.Append(" ").Append(record.Exception.GetBaseException().Message);
Logger[record.Level](message.ToString());
}
}
Конфигурация Nlog:
<nlog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<variable name="projectName" value="XXXXX" />
<variable name="filePath" value="OUR_CUSTOM_FILEPATH" />
<variable name="archiveFilePath" value="OUR_CUSTOM_FILEPATH" />
<variable name="elasticUrl" value="OUR_ELASTIC_SEARCH_ENDPOINT" />
<variable name="elasticUserName" value="XXXXXXX" />
<variable name="elasticPwd" value="XXXXXXXXX" />
<extensions>
<add assembly="NLog.Targets.ElasticSearch"/>
</extensions>
<targets>
<target name="logfile" xsi:type="File" createDirs="true" archiveEvery="Day" archiveNumbering="Rolling" maxArchiveFiles="30" concurrentWrites="true" archiveFileName="${archiveFilePath}${projectName}_${date:format=yyyyMMdd}.log" fileName="${filePath}${projectName}_${date:format=yyyyMMdd}.log" />
<target name="Elastic" xsi:type="ElasticSearch" index="XXXXXIndex_${date:format=yyyyMM}" includeAllProperties="True" uri="${elasticUrl}" requireAuth="True" username="${elasticUserName}" password="${elasticPwd}" >
<field name="Machine" layout="${machinename}" />
<layout type="JsonLayout" >
<attribute name="message" layout="${message}" />
<attribute name="level" layout="${level}" />
<attribute name="time" layout="${longdate}" />
<attribute name="machineName" layout="${machinename}"/>
</layout>
</target>
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="logfile" />
<logger name="*" minlevel="Debug" writeTo="Elastic" />
</rules>
</nlog>
Весь этот код работает нормально, когда я запускаю приложение из Visual Studio. Но при развертывании на ВМ и запуске приложения из диспетчера IIS я сталкиваюсь с вышеупомянутым исключением. Я проверил все пакеты и конфигурации и выглядит нормально.
Также я заметил, что перечисление TraceLevel, которое я использовал выше в NLogTraceWriter, не имеет никакого значения перечисления для метода Trace, но NLog В логгере есть метод Trace, который не отображается в словаре выше. Прошу пояснить, не является ли это причиной этой проблемы. Также, пожалуйста, помогите мне выяснить причину этой проблемы и устранить ее.
Я много исследовал эту проблему, но не смог найти какое-либо соответствующее объяснение. Пожалуйста, не отмечайте это как дубликат. Пожалуйста, направьте меня в правильном направлении.