using iWareCommon.Utils;
using iWareSql;
using iWareSql.Entity;
using iWareSql.Orm;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Linq;
using iWareSql.DBModel;
namespace iWareModel
{
///
/// 异常对象处理类
///
public class SysExceptionInfoHandler
{
///
/// 初始化异常信息类(仅仅是获取异常信息对象)
///
/// 入参类
/// 日志类型
/// 当前命名空间名
/// 方法名
/// 入参类
/// 异常方向,默认是WIP接收
/// 消息来源
///
public static Base_SysExceptionInfo GetExceptionInfo(LogType _logType, string namespaceName, string exceptionFun, T param,
ExceptionLevel exceptionLevel = ExceptionLevel.BusinessError,
string key1 = "", string key2 = "",
ExceptionSource exceptionSource = ExceptionSource.Receive
, string msgSource = "")
{
Base_SysExceptionInfo exception = new Base_SysExceptionInfo()
{
Id = Guid.NewGuid().ToString(),
module = _logType.ToString(),
creator = "sys",
key1 = key1,
key2 = key2,
exceptionLevel = Convert.ToInt32(exceptionLevel).ToString(),//异常级别:默认是业务错误
exceptionFun = namespaceName + "." + exceptionFun,//异常方法名
exceptionSource = Convert.ToInt32(exceptionSource).ToString(),//异常方向
sourceData = JsonConvert.SerializeObject(param), //入参
};
return exception;
}
///
/// Error情况下的异常信息赋值
///
///
///
public static void GetExceptionInfoForError(string errMsg, Exception ex, ref Base_SysExceptionInfo exception)
{
exception.exceptionMsg = errMsg + ":" + ex.Message + "|错误发生位置:" + ex.StackTrace;//增加错误位置 【EditBy shaocx,2020-04-01】
exception.exceptionLevel = Convert.ToInt32(ExceptionLevel.Error).ToString();
exception.exceptionData = JsonConvert.SerializeObject(ex);
//*/
}
///
/// 插入异常数据内容
///
/// 异常对象
/// 是否需要写入文本日志
public static void InsertExceptionInfo(Base_SysExceptionInfo eie, bool isWriteTextLog = false)
{
Task.Run(() =>
{
try
{
eie.createTime = DateTime.Now;
eie.host = MachineHelper.GetHostName();
using (DbModel dbContext = new DbModel())
{
dbContext.Base_SysExceptionInfo.Add(eie);
dbContext.SaveChanges();
}
if (isWriteTextLog)
{
Log4NetHelper.WriteErrorLog((LogType)Enum.Parse(typeof(LogType), eie.module), "插入异常数据内容:" + JsonConvert.SerializeObject(eie));
}
}
catch (Exception ex)
{
Log4NetHelper.WriteErrorLog((LogType)Enum.Parse(typeof(LogType), eie.module), "插入异常数据内容出现异常:" + JsonConvert.SerializeObject(ex) + ",eie:" + JsonConvert.SerializeObject(eie));
}
});
}
}
}