public void Log(string message) { if (_logEnabled) { OnLogged?.Invoke(message); } }
public void WriteVerboseLog(string message, Color color) { string nowTime = DateTime.UtcNow.ToString("u", CultureInfo.InvariantCulture); string log = $"[{nowTime}]: [Verbose] {message}" + Environment.NewLine + Environment.NewLine; OnLogged?.Invoke(log, color); InternalLogHander(log, color); }
public void WriteErrorLog(string errorMessage) { string nowTime = DateTime.UtcNow.ToString("u", CultureInfo.InvariantCulture); string log = $"[{nowTime}]: [Error] {errorMessage}" + Environment.NewLine + Environment.NewLine; OnLogged?.Invoke(log, Color.Red); InternalLogHander(log, Color.Red); }
public static void Log(LogObject log) { var list = new List <string>(); list.Add(log.ToString()); File.AppendAllLines(Path.Combine(WorkingDir, "log.sk"), list); LastLog = log; //Notify if necessary if (log.Notifiable) { OnLogged?.Invoke(); } }
/// <summary> /// Метод потока журналирования /// </summary> void logging() { ThreadStates threadState; do { // Вызываем событие с текущей длиной очереди OnLogged?.Invoke(EventsWriteAdapterInstance.GetQueueLength()); Thread.Sleep(100); // Осторожно читаем состояние потока, чтобы проверить, не пора ли заканчивать lock (ThreadStateLock) { threadState = ThreadState; } }while (threadState == ThreadStates.Working); // Состояние потока переключаем на "Закончили" lock (ThreadStateLock) { ThreadState = ThreadStates.Terminated; } }
/// <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); }
public static void Log(string message) { OnLogged?.Invoke(message); }
public void Logged(LogLevel level, string message) => OnLogged?.Invoke(this, new(level, message));
private void OnLogSuccess(IUserInfo userinfo) { OnLogged?.Invoke(this, userinfo); }