/// <summary> /// 初始化 /// </summary> /// <param name="level"></param> /// <param name="operationName"></param> /// <param name="des"></param> /// <param name="url"></param> /// <param name="result"></param> /// <param name="cost"></param> /// <param name="exp"></param> /// <param name="method"></param> /// <param name="mode"></param> /// <param name="params"></param> public APILog(int level, string operationName, string des, string url, string result, int cost, Exception exp, string method, string mode, params object[] @params) { UniqueID = IdWorker.GetId().ToString(); Level = level; Created = DateTimeHelper.Now; OperateName = string.IsNullOrEmpty(operationName) ? "被调用日志" : operationName; Description = des; Url = GetUrlWithoutQuery(url); Method = string.IsNullOrEmpty(method) ? "GET" : method; Mode = string.IsNullOrEmpty(mode) ? "Passive" : mode; Result = result; Cost = cost; StringBuilder json = new StringBuilder(); if (@params != null && @params.Any()) { foreach (var param in @params) { if (param == @params.First()) { json.Append(SerializeHelper.Serialize(param)); } else { json.Append($",{SerializeHelper.Serialize(param)}"); } } } Params = json.ToString(); Exception = exp; ExceptionMsg = exp?.Message; FromIP = IPHelper.GetLocalIp(); }
public static void Debug(string des, params object[] @params) { string paramStr = string.Empty; if (@params != null && @params.Any()) { paramStr = SerializeHelper.Serialize(@params); } Write($"[Debug]", $"{des}\tparams:{paramStr}"); }
public static void Warn(string des, Exception ex, params object[] @params) { string paramStr = string.Empty; if (@params != null && @params.Any()) { paramStr = SerializeHelper.Serialize(@params); } Write($"[Warn]", $"{des}\terr:{SerializeHelper.Serialize(ex)},params:{paramStr}"); }
/// <summary> /// 发送实体到服务器并返回实体 /// </summary> /// <typeparam name="T1"></typeparam> /// <typeparam name="T2"></typeparam> /// <param name="url"></param> /// <param name="t"></param> /// <returns></returns> public static T2 Post <T1, T2>(string url, T1 t) { var json = Post(url, SerializeHelper.Serialize(t)); if (string.IsNullOrEmpty(json)) { return(default(T2)); } return(SerializeHelper.Deserialize <T2>(json)); }
public static void Error(string des, Exception ex, params object[] @params) { string paramStr = string.Empty; if (@params != null && @params.Any()) { paramStr = SerializeHelper.Serialize(@params); } Write($"[Error]\t{des}", $"err:{ex.Message},params:{paramStr}"); }
public void Write(T t) { if (t != null) { var json = SerializeHelper.Serialize(t); using (var fs = File.Open(_filePath, FileMode.Create, FileAccess.Write, FileShare.ReadWrite)) { var data = Encoding.UTF8.GetBytes(json); fs.Write(data, 0, data.Length); } } }
/// <summary> /// post请求 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="url"></param> /// <param name="postModel"></param> /// <param name="headers"></param> /// <param name="timeOut"></param> /// <returns></returns> public static async Task <T> PostViewModelAsync <T>(string url, object postModel, Dictionary <string, string> headers = null, int timeOut = 30 * 1000) { var postData = SerializeHelper.Serialize(postModel); if (headers == null) { headers = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase); } if (!headers.ContainsKey("Content-Type")) { headers.Add("Content-Type", "application/json; charset=UTF-8"); } var json = await PostJsonAsync(url, postData, headers, timeOut); if (string.IsNullOrEmpty(json)) { return(default(T)); } return(SerializeHelper.Deserialize <T>(json)); }
/// <summary> /// 外部请求跟踪日志方法 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="get"></param> /// <param name="func"></param> /// <param name="params"></param> /// <returns>logcom 第一个参数为url,最后一个参数是返回值</returns> public static T TackingLog <T>(bool get, Func <T> func, params object[] @params) { if (@params == null) { return(default(T)); } var list = new List <object>(); list.AddRange(@params); try { StackTrace st = new StackTrace(); var sfs = st.GetFrames(); for (int i = 1; i < sfs.Length; ++i) { if (StackFrame.OFFSET_UNKNOWN == sfs[i].GetILOffset()) { break; } var methodName = sfs[i].GetMethod().Name; var fullName = sfs[i].GetFileName() + "()->" + methodName; list.Add(fullName); } } catch { } T result = default(T); var mil = 0L; Stopwatch stopwatch = Stopwatch.StartNew(); try { result = func.Invoke(); mil = stopwatch.ElapsedMilliseconds; list.Add("cost:" + mil); list.Add(mil); list.Add(result); } catch (Exception ex) { mil = stopwatch.ElapsedMilliseconds; list.Add("cost:" + mil); list.Add(mil); list.Add("err:" + ex.Message); if (ex.Message.IndexOf("操作超时") > -1 || ex.Message.IndexOf("Timeout") > -1) { OnLogged?.Invoke(new APILog(level: 2, operationName: "调用五秒超时日志", des: get ? "ApiHelper.Get" : "ApiHelper.Post", url: @params[0].ToString(), result: "", cost: (int)mil, method: (get ? "GET" : "POST"), mode: "Active", exp: ex, @params: list.ToArray())); } else { OnLogged?.Invoke(new APILog(level: 3, operationName: "调用异常日志", des: get ? "ApiHelper.Get" : "ApiHelper.Post", url: @params[0].ToString(), result: "", cost: (int)mil, method: (get ? "GET" : "POST"), mode: "Active", exp: ex, @params: list.ToArray())); } } finally { OnLogged?.Invoke(new APILog(level: 0, operationName: "调用日志", des: get ? "ApiHelper.Get" : "ApiHelper.Post", url: @params[0].ToString(), result: SerializeHelper.Serialize(result), cost: (int)mil, method: (get ? "GET" : "POST"), mode: "Active", exp: null, @params: list.ToArray())); stopwatch.Stop(); } return(result); }
/// <summary> /// 将实体发送给远程服务器 /// 发送json /// </summary> /// <param name="url"></param> /// <param name="obj"></param> /// <returns></returns> public static string Post(string url, Object obj) { return(Post(url, SerializeHelper.Serialize(obj))); }