using System; using System.Collections.Concurrent; using OS.Common.Modules.AsynModule; namespace OS.Common.Modules.LogModule { /// /// 日志等级 /// public enum LogLevelEnum { /// /// 跟踪查看 /// Trace, /// /// 信息 /// Info, /// /// 错误 /// Error, /// /// 警告 /// Warning, } /// /// 日志实体 /// public sealed class LogInfo { /// /// 空构造函数 /// public LogInfo() { } /// /// 日志构造函数 /// /// /// /// /// internal LogInfo(LogLevelEnum loglevel, object msg, string msgKey = null, string moduleName = ModuleNames.Default) { Level = loglevel; ModuleName = moduleName; Msg = msg; MsgKey = msgKey; } /// /// 日志等级 /// public LogLevelEnum Level { get; set; } /// /// 日志类型 /// public string ModuleName { get; set; } /// /// key值 可以是自定义的标识 /// 根据此字段可以处理当前module下不同复杂日志信息 /// public string MsgKey { get; set; } /// /// 日志信息 可以是复杂类型 如 具体实体类 /// public object Msg { get; set; } /// /// 编号(全局唯一) /// public string LogCode { get; set; } } /// /// 日志写模块 /// public static class LogUtil { /// /// 记录日志操作的异步模块 /// internal static string LogAsynModuleName { get; set; } private static readonly ConcurrentDictionary _logDirs = new ConcurrentDictionary(); /// /// 通过模块名称获取日志模块实例 /// /// /// public static ILogWriter GetLogWrite(string logModule) { if (string.IsNullOrEmpty(logModule)) logModule = ModuleNames.Default; if (_logDirs.ContainsKey(logModule)) return _logDirs[logModule]; var log = OsConfig.Provider.GetLogWrite(logModule) ?? new LogWriter(); _logDirs.TryAdd(logModule, log); return log; } /// /// 记录信息 /// /// 日志信息 /// 关键值 /// 模块名称 public static string Info(object msg, string msgKey = null, string moduleName = ModuleNames.Default) { return Log(new LogInfo(LogLevelEnum.Info, msg, msgKey, moduleName)); } /// /// 记录警告,用于未处理异常的捕获 /// /// 日志信息 /// 关键值 /// 模块名称 public static string Warning(object msg, string msgKey = null, string moduleName = ModuleNames.Default) { return Log(new LogInfo(LogLevelEnum.Warning, msg, msgKey, moduleName)); } /// /// 记录错误,用于捕获到的异常信息记录 /// /// 日志信息 /// 关键值 /// 模块名称 public static string Error(object msg, string msgKey = null, string moduleName = ModuleNames.Default) { return Log(new LogInfo(LogLevelEnum.Error, msg, msgKey, moduleName)); } /// /// 记录错误,用于捕获到的异常信息记录 /// /// 日志信息 /// 关键值 /// 模块名称 public static string Trace(object msg, string msgKey = null, string moduleName = ModuleNames.Default) { return Log(new LogInfo(LogLevelEnum.Trace, msg, msgKey, moduleName)); } /// /// 记录日志 /// /// private static string Log(LogInfo info) { if (string.IsNullOrEmpty(info.ModuleName)) info.ModuleName = ModuleNames.Default; var logWrite = GetLogWrite(info.ModuleName); info.LogCode = logWrite.GetLogCode(info); AsynUtil.Asyn(logWrite.WriteLog, info, LogAsynModuleName); // logActionList.Post(info); return info.LogCode; } } }