示例#1
0
文件: Logger.cs 项目: Suprndm/odin
 public void Log(string message)
 {
     if (_logEnabled)
     {
         OnLogged?.Invoke(message);
     }
 }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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;
            }
        }
示例#6
0
        /// <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);
        }
示例#7
0
 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);
 }