using System; using System.Collections.Generic; using OS.Common.Modules; using OS.Common.Modules.AsynModule; namespace OS.Common.LogModule { public enum LogLevelEnum { /// /// 跟踪查看 /// Trace, /// /// 信息 /// Info, /// /// 错误 /// Error, /// /// 警告 /// Warning, } public class LogInfo { /// /// 空构造函数 /// public LogInfo() { } /// /// 日志构造函数 /// /// /// /// /// internal LogInfo(LogLevelEnum loglevel,string msg,object key=null,string moduleName=ModuleLogKeys.Default) { Level = loglevel; ModuleName = moduleName; Message = msg; Key = key; } /// /// 日志等级 /// public LogLevelEnum Level { get; set; } /// /// 日志类型 /// public string ModuleName { get; set; } /// /// key值 可以是id等 /// public object Key { get; set; } /// /// 日志信息 /// public string Message { get; set; } /// /// 错误编号 /// public string ErrorCode { get;internal set; } } /// /// 日志写模块 /// public static class LogUtil { ///// ///// 异步缓冲池 ///// //private static ActionBlock logActionList=new ActionBlock(info => //{ // var act = CreateLogWriter(info.Category); // act.WriteLog(new LogInfo(info.Level,info.Category,info.Message,info.Key)); //},new ExecutionDataflowBlockOptions() { MaxDegreeOfParallelism = 3 } ); /// /// 记录日志操作的异步模块 /// internal static string LogAsynModuleName { get; set; } internal static Dictionary LogModules= new Dictionary(); static LogUtil() { if (!LogModules.ContainsKey(ModuleAsynKeys.Default)) { LogModules.Add(ModuleLogKeys.Default, new LogWriter()); } } /// /// 通过模块名称获取日志模块实例 /// /// /// public static ILogWriter GetLogWrite(string logModule) { if (!string.IsNullOrEmpty(logModule)&&LogModules.ContainsKey(logModule)) { return LogModules[logModule]; } return LogModules[ModuleCacheKeys.Default]; } /// /// 记录信息 /// /// 日志信息 /// 关键值 /// 模块名称 public static string Info(string msg, object key=null, string moduleName=ModuleCacheKeys.Default) { return Log(new LogInfo(LogLevelEnum.Info, msg, key, moduleName)); } /// /// 记录警告,用于未处理异常的捕获 /// /// 日志信息 /// 关键值 /// 模块名称 public static string Warning(string msg, object key = null, string moduleName=ModuleCacheKeys.Default) { return Log(new LogInfo(LogLevelEnum.Warning, msg, key, moduleName)); } /// /// 记录错误,用于捕获到的异常信息记录 /// /// 日志信息 /// 关键值 /// 模块名称 public static string Error(string msg, object key = null, string moduleName=ModuleCacheKeys.Default) { return Log(new LogInfo(LogLevelEnum.Error, msg, key, moduleName)); } /// /// 记录错误,用于捕获到的异常信息记录 /// /// 日志信息 /// 关键值 /// 模块名称 public static string Trace(string msg, object key = null, string moduleName=ModuleCacheKeys.Default) { return Log(new LogInfo(LogLevelEnum.Trace, msg, key, moduleName)); } /// /// 记录日志 /// /// public static string Log(LogInfo info) { info.ErrorCode = GetErrorCode(); if (string.IsNullOrEmpty(info.ModuleName)) info.ModuleName = ModuleCacheKeys.Default; var logWrite = GetLogWrite(info.ModuleName); AsynUtil.Asyn(logWrite.WriteLog, info, LogAsynModuleName); // logActionList.Post(info); return info.ErrorCode; } /// /// 生成错误编号 /// /// private static string GetErrorCode() { return Guid.NewGuid().ToString().Replace("-", ""); } } }