2019-11-26 09:31:53 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
2020-07-17 10:52:28 +00:00
|
|
|
|
|
2019-11-26 09:31:53 +00:00
|
|
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
|
using Microsoft.Extensions.Options;
|
|
|
|
|
|
|
|
|
|
namespace ASC.Common.Logging
|
|
|
|
|
{
|
2021-08-10 14:56:59 +00:00
|
|
|
|
[Singletone]
|
2019-11-26 09:31:53 +00:00
|
|
|
|
public class EFLoggerFactory : ILoggerFactory
|
|
|
|
|
{
|
2020-10-18 19:00:38 +00:00
|
|
|
|
Lazy<ILogger> Logger { get; set; }
|
2019-11-26 09:31:53 +00:00
|
|
|
|
ILoggerProvider LoggerProvider { get; set; }
|
|
|
|
|
|
|
|
|
|
public EFLoggerFactory(EFLoggerProvider loggerProvider)
|
|
|
|
|
{
|
|
|
|
|
LoggerProvider = loggerProvider;
|
2020-10-18 19:00:38 +00:00
|
|
|
|
Logger = new Lazy<ILogger>(() => LoggerProvider.CreateLogger(""));
|
2019-11-26 09:31:53 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void AddProvider(ILoggerProvider provider)
|
|
|
|
|
{
|
|
|
|
|
//LoggerProvider = provider;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public ILogger CreateLogger(string categoryName)
|
|
|
|
|
{
|
2020-10-18 19:00:38 +00:00
|
|
|
|
return Logger.Value;
|
2019-11-26 09:31:53 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Dispose()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-08-10 14:56:59 +00:00
|
|
|
|
[Singletone]
|
2019-11-26 09:31:53 +00:00
|
|
|
|
public class EFLoggerProvider : ILoggerProvider
|
|
|
|
|
{
|
2020-08-12 09:58:08 +00:00
|
|
|
|
private IOptionsMonitor<ILog> Option { get; }
|
2019-11-26 09:31:53 +00:00
|
|
|
|
|
|
|
|
|
public EFLoggerProvider(IOptionsMonitor<ILog> option)
|
|
|
|
|
{
|
|
|
|
|
Option = option;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public ILogger CreateLogger(string categoryName)
|
|
|
|
|
{
|
|
|
|
|
return new EFLogger(Option.Get("ASC.SQL"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Dispose() { }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class EFLogger : ILogger
|
|
|
|
|
{
|
|
|
|
|
public ILog CustomLogger { get; }
|
|
|
|
|
|
|
|
|
|
public EFLogger(ILog customLogger)
|
|
|
|
|
{
|
|
|
|
|
CustomLogger = customLogger;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public IDisposable BeginScope<TState>(TState state) { return null; }
|
2020-09-30 14:47:42 +00:00
|
|
|
|
public bool IsEnabled(LogLevel logLevel)
|
2019-11-26 09:31:53 +00:00
|
|
|
|
{
|
2020-09-30 14:47:42 +00:00
|
|
|
|
return logLevel switch
|
|
|
|
|
{
|
|
|
|
|
LogLevel.Trace => CustomLogger.IsTraceEnabled,
|
|
|
|
|
LogLevel.Information => CustomLogger.IsInfoEnabled,
|
|
|
|
|
LogLevel.None => false,
|
2019-11-26 09:31:53 +00:00
|
|
|
|
|
2020-09-30 14:47:42 +00:00
|
|
|
|
LogLevel.Debug => CustomLogger.IsDebugEnabled,
|
|
|
|
|
LogLevel.Warning => CustomLogger.IsWarnEnabled,
|
|
|
|
|
LogLevel.Error => CustomLogger.IsErrorEnabled,
|
|
|
|
|
LogLevel.Critical => CustomLogger.IsErrorEnabled,
|
2019-11-26 09:31:53 +00:00
|
|
|
|
|
2020-09-30 14:47:42 +00:00
|
|
|
|
_ => true,
|
|
|
|
|
};
|
|
|
|
|
}
|
2019-11-26 09:31:53 +00:00
|
|
|
|
|
|
|
|
|
public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
|
|
|
|
|
{
|
|
|
|
|
switch (eventId.Id)
|
|
|
|
|
{
|
2020-02-21 08:13:01 +00:00
|
|
|
|
//case 20000:
|
|
|
|
|
// CustomLogger.Debug(formatter(state, exception));
|
|
|
|
|
// break;
|
2019-11-26 09:31:53 +00:00
|
|
|
|
case 20101:
|
|
|
|
|
var keyValuePairs = state as IEnumerable<KeyValuePair<string, object>>;
|
2021-08-20 12:42:43 +00:00
|
|
|
|
CustomLogger.DebugWithProps("", keyValuePairs);
|
2019-11-26 09:31:53 +00:00
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|