You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

115 lines
4.8 KiB

using FactorySystemModel.ResponseModel;
using FactorySystemModel.SqlSugarModel;
using Newtonsoft.Json;
using System;
using System.IO;
using System.Net.Http;
using System.Threading;
namespace FactorySystemCommon
{
/// <summary>
/// 异常处理
/// </summary>
public static class ExceptionHelper
{
/// <summary>
/// 返回错误原因TryCatch统一处理
/// </summary>
public static ApiResult TryReturnException(Action action, ApiResult response, HttpRequestMessage request, object inParam = null,
[System.Runtime.CompilerServices.CallerMemberName] string memberName = "",
[System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "",
[System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = 0)
{
try
{
WriteMessage(string.Format("接口:{1},接口开始:{0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), request.RequestUri), 99);
action();
}
catch (Exception ex)
{
response = new ApiResult().Error(ex);
//保存日志
WriteMessage(ex.Message, 1);
}
//通用接口调用日志
new Thread(o =>
{
try
{
TFS_SystemJournal journal = new TFS_SystemJournal()
{
FID = DateTime.Now.ToString("yyMMdd"),
FParamIn = inParam == null ? "" : JsonConvert.SerializeObject(inParam),
FParamOut = JsonConvert.SerializeObject(response),
FAddUser = HttpContextHelp.GetUserId(request),
FBower = HttpContextHelp.GetBrowserInfo(request),
FApiUrl = request.RequestUri.AbsolutePath,
FIP = HttpContextHelp.GetIPAddress(request)
};
AppSettingsHelper.GetSqlSugar().Insertable(journal).ExecuteCommandAsync();
}
catch (Exception) { }
})
{ IsBackground = true }.Start();
if (request.Properties.ContainsKey("reticket")) response.Ticket = request.Properties["reticket"].ToString();
WriteMessage(string.Format("接口:{1},接口结束:{0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), request.RequestUri), 99);
return response;
}
public static void AddSystemJournal(HttpRequestMessage request, object inParam = null, object outParam = null, int userId = -1, string apiUrl = "")
{
//通用接口调用日志
new Thread(o =>
{
try
{
TFS_SystemJournal journal = new TFS_SystemJournal()
{
FID = DateTime.Now.ToString("yyMMdd"),
FParamIn = inParam == null ? "" : JsonConvert.SerializeObject(inParam),
FParamOut = outParam == null ? "" : JsonConvert.SerializeObject(outParam),
FAddUser = userId > 0 ? userId : HttpContextHelp.GetUserId(request),
FBower = HttpContextHelp.GetBrowserInfo(request),
FApiUrl = !string.IsNullOrEmpty(apiUrl) ? apiUrl : request != null ? request.RequestUri.AbsolutePath : "",
FIP = HttpContextHelp.GetIPAddress(request)
};
AppSettingsHelper.GetSqlSugar().Insertable(journal).ExecuteCommandAsync();
}
catch (Exception) { }
})
{ IsBackground = true }.Start();
}
public static void WriteMessage(string msgData, int msgType)
{
try
{
if (msgData.IndexOf("TFS_SystemJournal") != -1) return;
string path = AppDomain.CurrentDomain.BaseDirectory + "/log/" + DateTime.Now.ToString("yyyy-MM") + "/";
path = path.Replace("\\", "/").Trim('/') + "/";
if (!Directory.Exists(path)) Directory.CreateDirectory(path);
string fileType = ".log";
switch (msgType)
{
case 1:
fileType = "_error" + fileType;
break;
case 2:
fileType = "_debug" + fileType;
break;
case 99:
fileType = "_log_info" + fileType;
break;
default:
fileType = "_info" + fileType;
break;
}
File.AppendAllText(path + DateTime.Now.ToString("dd") + fileType, msgData + "\r\n");
}
catch (Exception) { }
}
}
}