using NLog; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; namespace SKMC.Api.Common.Logger { public class LogFactory { static LogFactory() { // NLog特殊处理,需要先注册Target再获取LOG实例,否则Target内部方法无法触发。 NLog.LogManager.Setup() .SetupExtensions(ext => { ext.RegisterTarget("LoggingProductionTarget"); ext.RegisterTarget("LoggingParameterTarget"); ext.RegisterTarget("LoggingProcessTarget"); ext.RegisterTarget("LoggingActionTarget"); }) .LoadConfigurationFromFile("nlog.config"); } /// /// "Log4Net" 或 "NLog" /// private static readonly string LoggerType = "NLog"; public static ILogger Get(Type type) { if (LoggerType == "Log4Net") { return new Log4netLogger(type); } else if (LoggerType == "NLog") { return new NLogLogger(type.FullName); } else { throw new NotSupportedException($"Logger type {LoggerType} is not supported."); } } public static ILogger Get([CallerFilePath] string callerFilePath = "") { var callerType = System.IO.Path.GetFileNameWithoutExtension(callerFilePath); if (LoggerType == "Log4Net") { return new Log4netLogger(callerType); } else if (LoggerType == "NLog") { return new NLogLogger(callerType); } else { throw new NotSupportedException($"Logger type {LoggerType} is not supported."); } } public static ILogger Get(LogCategory logCategory) { if (logCategory == LogCategory.ProductionLogger) { return new NLogLogger("ProductionLogger"); } else if(logCategory == LogCategory.ParameterLogger) { return new NLogLogger("ParameterLogger"); } else if (logCategory == LogCategory.ProcessLogger) { return new NLogLogger("ProcessLogger"); } else if(logCategory == LogCategory.ActionLogger) { return new NLogLogger("ActionLogger"); } else { throw new NotSupportedException($"Logger category {logCategory.ToString()} is not supported."); } } public enum LogCategory { ProductionLogger, ParameterLogger, ProcessLogger, ActionLogger } } }