При переносе моего решения на .NET Standard 2.0 из .NET Framework некоторые функции оказываются недоступными, в моем случае это ITraceWriter и TraceRecord.Для лучшего понимания это часть пакета nuget, который подается в шаблон микросервиса, поэтому этот класс содержит только словарь.Я хотел бы сохранить эту логику, но я уже прошел через несколько сайтов и сообщений без удачи.
using NLog;
using NLog.Web.AspNetCore;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Net.Http;
using System.Text;
namespace Microservices.LibCore.Util
{
/// <summary>
/// </summary>
public class NLogUtil
{
/// <summary>
/// </summary>
/// <returns></returns>
public static NlogTraceWriter getTraceWriter()
{
return new NlogTraceWriter();
}
}
/// <summary>
/// </summary>
public sealed 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.Verbose, classLogger.Debug},
{TraceLevel.Error, classLogger.Error},
{TraceLevel.Off, classLogger.Fatal},
{TraceLevel.Warning, 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.AbsoluteUri);
}
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());
}
public TraceLevel LevelFilter { get; }
}
}