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("-", "");
}
}
}