Beispiel #1
0
 /// <summary>
 /// 写Log到DB中
 /// </summary>
 /// <param name="eLevel"></param>
 /// <param name="curTime"></param>
 /// <param name="nLogID"></param>
 /// <param name="strMsg"></param>
 /// <param name="strFinalMsg"></param>
 /// <param name="nTaskID"></param>
 private void WriteToDB(ENUM_LogLevel eLevel, DateTime curTime, int nLogID, string strMsg, string strFinalMsg, int nTaskID)
 {
     try
     {
         if (((int)eLevel) < ((int)ENUM_LogLevel.eLogLevel_Warning))
         {
             return;
         }
         if (m_DBLog == null)
         {
             return;
         }
         FKSQLiteLogNode node = new FKSQLiteLogNode();
         node.LogId    = m_nLogID;
         node.LogTime  = curTime;
         node.LogLevel = (int)eLevel;
         node.LogInfo  = strMsg;
         node.TaskID   = nTaskID;
         m_DBLog.AddLogToDB(node);
     }
     catch (Exception e)
     {
         Console.WriteLine($"[Error] Write a log to DB failed. Error = {e.Message}, Msg = {strFinalMsg}, TaskID = {nTaskID}");
     }
 }
Beispiel #2
0
        /// <summary>
        /// 添加一行日志,注意:这里拒绝向外开放,请去使用 FKLogImp 中的接口
        /// </summary>
        /// <param name="eLevel"></param>
        /// <param name="strMsg"></param>
        /// <param name="nTaskID"></param>
        internal void AddLog(ENUM_LogLevel eLevel, string strMsg, int nTaskID = 0)
        {
            try
            {
                if (strMsg == null)
                {
                    strMsg = "Empty message";
                }
                DateTime curTime    = DateTime.Now;
                string   strDayTime = curTime.ToString("yyyy-MM-dd");
                m_strTxtFileName = FKSystemFileSystemHelper.GetWorkdir() + "\\" + FKLogConsts.TEXT_LOG_DIR_NAME
                                   + "\\" + "FKLog." + strDayTime + FKLogConsts.TEXT_LOG_FILE_SUFFIX;

                m_nLogID++;
                if (m_nLogID >= 999999)
                {
                    m_nLogID = 0;
                }

                StackTrace ss               = new StackTrace(true);
                StackFrame sf               = ss.GetFrame(2); // 上两层调用点
                MethodBase mb               = sf.GetMethod(); // 上两层调用函数
                string     strModuleName    = mb.Module.Name;
                string     strNameSpaceName = mb.DeclaringType.Namespace;
                string     strFunctionName  = mb.Name;
                string     strFileName      = sf.GetFileName();          // 文件名
                int        nLine            = sf.GetFileLineNumber();    // 调用行号
                string     strFullName      = mb.ReflectedType.FullName; // 完全限定名
                string     strClassName     = mb.DeclaringType.Name;     // 类名
                string     strThreadName    = Thread.CurrentThread.Name; // 线程名

                string strFinalMsg = FormatString(eLevel, curTime, m_nLogID, strMsg,
                                                  strClassName, strThreadName, strFullName, strFileName, nLine,
                                                  eLevel == ENUM_LogLevel.eLogLevel_Error ? ss.ToString() : "");

                lock (m_objAddLogLock)
                {
                    Console.WriteLine(strFinalMsg);
                    WriteToIDE(eLevel, m_nLogID, strMsg);
                    WriteToFile(eLevel, strFinalMsg);
                    WriteToDB(eLevel, curTime, m_nLogID, strMsg, strFinalMsg, nTaskID);
                }
                //if (string.Compare(strThreadName, "FKLogicThread") != 0) //非主进程,禁止Form输出,不然会有可能出现死锁
                {
                    WriteToForm(eLevel, curTime, m_nLogID, strMsg, strFinalMsg, nTaskID);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine($"[Error] Add log failed. Error = {e.ToString()}");
            }
        }
Beispiel #3
0
 /// <summary>
 /// 写Log到IDE的输出面板
 /// </summary>
 /// <param name="eLevel"></param>
 /// <param name="nLogID"></param>
 /// <param name="strMsg"></param>
 /// <param name="strFinalMsg"></param>
 private void WriteToIDE(ENUM_LogLevel eLevel, int nLogID, string strMsg)
 {
     try
     {
         if (m_Trace == null)
         {
             return;
         }
         m_Trace.TraceEvent(GetFormTypeAnalyzer(eLevel), nLogID, strMsg);
     }
     catch
     {
         // 这里暂时不需要做处理,因为该函数调用频率很高,且重要性不高
     }
 }
Beispiel #4
0
        /// <summary>
        /// 写Log到Form中显示
        /// </summary>
        /// <param name="eLevel"></param>
        /// <param name="nLogID"></param>
        /// <param name="strMsg"></param>
        /// <param name="strFinalMsg"></param>
        private void WriteToForm(ENUM_LogLevel eLevel, DateTime curTime, int nLogID, string strMsg, string strFinalMsg, int nTaskID)
        {
            try
            {
                if (m_LogRichTextBox == null)
                {
                    return;
                }

                // 官方标准Log格式太难看了。。。我还是自己设计一个form显示的吧。。。
                string strLevel = "";
                if (eLevel == ENUM_LogLevel.eLogLevel_Info)
                {
                    strLevel = "[INFO]";
                }
                if (eLevel == ENUM_LogLevel.eLogLevel_Error)
                {
                    strLevel = "[EROR]";
                }
                if (eLevel == ENUM_LogLevel.eLogLevel_Warning)
                {
                    strLevel = "[WARN]";
                }
                string strTime    = curTime.ToString("yyyy-MM-dd|HH:mm:ss");
                string strFormMsg = nLogID.ToString("000000") + "|" + strTime + "|" + strLevel + "|" + nTaskID + "|" + strMsg;

                LogAppendDelegate la = new LogAppendDelegate(LogAppendToForm);
                if (eLevel == ENUM_LogLevel.eLogLevel_Error)
                {
                    m_LogRichTextBox.Invoke(la, Color.Red, strFormMsg);
                }
                else if (eLevel == ENUM_LogLevel.eLogLevel_Warning)
                {
                    m_LogRichTextBox.Invoke(la, Color.Yellow, strFormMsg);
                }
                else if (eLevel == ENUM_LogLevel.eLogLevel_Info)
                {
                    m_LogRichTextBox.Invoke(la, Color.White, strFormMsg);
                }
            }
            catch
            {
                // 这里暂时不需要做处理,因为该函数调用频率很高,且在WriteToDB处已做处理
            }
        }
Beispiel #5
0
 /// <summary>
 /// 写Log到File文件中
 /// </summary>
 /// <param name="eLevel"></param>
 /// <param name="nLogID"></param>
 /// <param name="strMsg"></param>
 /// <param name="strFinalMsg"></param>
 private void WriteToFile(ENUM_LogLevel eLevel, string strFinalMsg)
 {
     try
     {
         if (((int)eLevel) < ((int)ENUM_LogLevel.eLogLevel_Info))
         {
             return;
         }
         FKSystemFileSystemHelper.CreateDir(FKSystemFileSystemHelper.GetWorkdir() + "\\" + FKLogConsts.TEXT_LOG_DIR_NAME);
         using (StreamWriter w = File.AppendText(m_strTxtFileName))
         {
             w.WriteLine(strFinalMsg);
         }
     }
     catch
     {
         // 这里暂时不需要做处理,因为该函数调用频率很高,且重要性不高
     }
 }
Beispiel #6
0
        /// <summary>
        /// 组成一个完整的自定义格式的日志字符串
        /// 请不要修改格式,规范在:http://10.66.72.200:8090/pages/viewpage.action?pageId=10289925
        /// </summary>
        /// <param name="eLevel"></param>
        /// <param name="curTime"></param>
        /// <param name="nLogID"></param>
        /// <param name="strMsg"></param>
        /// <returns></returns>
        private static string FormatString(ENUM_LogLevel eLevel, DateTime curTime,
                                           int nLogID, string strCustomMsg, string strClassName, string strThreadName,
                                           string strFullName, string strFileName, int nLine, string strTraceStack)
        {
            string strLevel = "";

            if (eLevel == ENUM_LogLevel.eLogLevel_Debug)
            {
                strLevel = "[DEBUG]";
            }
            if (eLevel == ENUM_LogLevel.eLogLevel_Error)
            {
                strLevel = "[ERROR]";
            }
            if (eLevel == ENUM_LogLevel.eLogLevel_Info)
            {
                strLevel = "[INFO]";
            }
            if (eLevel == ENUM_LogLevel.eLogLevel_Warning)
            {
                strLevel = "[WARNING]";
            }

            if (nLogID >= 999990)
            {
                nLogID = 0;
            }

            string strTime = curTime.ToString("yyyy-MM-dd HH:mm:ss,fff");

            string strRet = strTime + "の" + strLevel + "の"
                            + "[" + strClassName + "]:"
                            + "[" + strThreadName + "]:"
                            + "[" + strFullName + "(" + strFileName + ":" + nLine + ")]:"
                            + strCustomMsg + "-"
                            + strTraceStack + "の";

            return(strRet);
        }
Beispiel #7
0
        /// <summary>
        /// 将自定义LogLevel转译为C#系统LogLevel
        /// </summary>
        /// <param name="eLevel"></param>
        /// <returns></returns>
        private static TraceEventType GetFormTypeAnalyzer(ENUM_LogLevel eLevel)
        {
            TraceEventType e = TraceEventType.Information;

            if (eLevel == ENUM_LogLevel.eLogLevel_Debug)
            {
                e = TraceEventType.Verbose;
            }
            if (eLevel == ENUM_LogLevel.eLogLevel_Error)
            {
                e = TraceEventType.Error;
            }
            if (eLevel == ENUM_LogLevel.eLogLevel_Warning)
            {
                e = TraceEventType.Warning;
            }
            if (eLevel == ENUM_LogLevel.eLogLevel_Info)
            {
                e = TraceEventType.Information;
            }

            return(e);
        }