Esempio n. 1
0
        /// <summary>
        /// 写日志(可以多线程操作)
        /// </summary>
        /// <param name="info"></param>
        public void Write(LogInfo info)
        {
            //  日志过滤
            if (info.MessageFlag < level)
                return;

            bool bIsLock = false;

            lock (s_LockLogInfoQueue) {
                s_LogInfoQueue.Enqueue(info);

                // 检测是否有其它的线程已在处理中,如在使用就退出,否则开始锁定
                if (s_IsLock == false)
                    bIsLock = s_IsLock = true;
            }

            // 如果有其它的线程在处理就退出
            if (bIsLock == false)
                return;

            LogInfo[] logInfoArray;

            do {
                logInfoArray = null;

                lock (s_LockLogInfoQueue) {
                    if (s_LogInfoQueue.Count > 0) {
                        logInfoArray = s_LogInfoQueue.ToArray();
                        s_LogInfoQueue.Clear();
                    }
                    else
                        s_IsLock = false; // 没有数据需要处理,释放锁定让其它的程序来继续处理
                }

                if (logInfoArray == null)
                    break;

                for (int iIndex = 0; iIndex < logInfoArray.Length; iIndex++) {
                    LogInfo logInfo = logInfoArray[iIndex];

                    if (logInfo.Parameter == null)
                        InternalWriteLine(logInfo.MessageFlag, logInfo.Format);
                    else
                        InternalWriteLine(logInfo.MessageFlag, logInfo.Format, logInfo.Parameter);
                }

            } while (true);
        }
Esempio n. 2
0
        /// <summary>
        /// 日志输出
        /// </summary>
        /// <param name="info"></param>
        public void Write(LogInfo info)
        {
            //  日志过滤
            if (info.MessageFlag < level || info.MessageFlag > LogMessageType.MSG_FATALERROR)
                return;

            bool isLock = false;

            lock (s_lockLogFileInfoQueue) {
                logFileInfoQueue.Enqueue(info);

                // 检测是否有其它的线程已在处理中,如在使用就退出,否则开始锁定
                if (isLockFile == false)
                    isLock = isLockFile = true;
            }

            // 如果有其它的线程在处理就退出
            if (isLock == false)
                return;

            LogInfo[] logInfoArray;
            do {
                logInfoArray = null;

                lock (s_lockLogFileInfoQueue) {
                    if (logFileInfoQueue.Count > 0) {
                        logInfoArray = logFileInfoQueue.ToArray();
                        logFileInfoQueue.Clear();
                    }
                    else
                        isLockFile = false; // 没有数据需要处理,释放锁定让其它的程序来继续处理
                }

                if (logInfoArray == null)
                    break;

                using (StreamWriter writer = new StreamWriter(fileName, true))//File.AppendText(fileName))
                {
                    for (int iIndex = 0; iIndex < logInfoArray.Length; iIndex++) {
                        LogInfo logInfo = logInfoArray[iIndex];

                        writer.WriteLine(logInfo.ToString());
                    }
                }
            } while (true);
        }
        /// <summary>
        /// 写日志(可以多线程操作)
        /// </summary>
        /// <param name="info"></param>
        public void Write(LogInfo info)
        {
            //  日志过滤
            if (info.MessageFlag < level)
            {
                return;
            }

            bool bIsLock = false;

            lock (s_LockLogInfoQueue) {
                s_LogInfoQueue.Enqueue(info);

                // 检测是否有其它的线程已在处理中,如在使用就退出,否则开始锁定
                if (s_IsLock == false)
                {
                    bIsLock = s_IsLock = true;
                }
            }


            // 如果有其它的线程在处理就退出
            if (bIsLock == false)
            {
                return;
            }

            LogInfo[] logInfoArray;

            do
            {
                logInfoArray = null;

                lock (s_LockLogInfoQueue) {
                    if (s_LogInfoQueue.Count > 0)
                    {
                        logInfoArray = s_LogInfoQueue.ToArray();
                        s_LogInfoQueue.Clear();
                    }
                    else
                    {
                        s_IsLock = false; // 没有数据需要处理,释放锁定让其它的程序来继续处理
                    }
                }

                if (logInfoArray == null)
                {
                    break;
                }

                for (int iIndex = 0; iIndex < logInfoArray.Length; iIndex++)
                {
                    LogInfo logInfo = logInfoArray[iIndex];

                    if (logInfo.Parameter == null)
                    {
                        InternalWriteLine(logInfo.MessageFlag, logInfo.Format);
                    }
                    else
                    {
                        InternalWriteLine(logInfo.MessageFlag, logInfo.Format, logInfo.Parameter);
                    }
                }
            } while (true);
        }