示例#1
0
        /// <summary>
        /// 重写ToString
        /// </summary>
        /// <returns>String</returns>
        public override string ToString()
        {
            string logMsg;

            try
            {
                logMsg = this.Message;
                if (string.IsNullOrWhiteSpace(logMsg))
                {
                    if (this.Exception != null)
                    {
                        logMsg = this.Exception.ToString();
                    }
                }
                else
                {
                    if (this.Exception != null)
                    {
                        logMsg = string.Format("{0},{1}", logMsg, this.Exception.ToString());
                    }
                }
            }
            catch (Exception ex)
            {
                LogSysInnerLog.OnRaiseLog("LogItem", ex);
                logMsg = "日志异常";
            }

            return(logMsg);
        }
示例#2
0
        /// <summary>
        /// 实例添加日志
        /// </summary>
        /// <param name="skipFrames"></param>
        /// <param name="level">日志级别</param>
        /// <param name="eventId">事件ID</param>
        /// <param name="tag">与对象关联的用户定义数据</param>
        /// <param name="ex">异常</param>
        /// <param name="format">复合格式字符串,参数为空或null表示无格式化</param>
        /// <param name="args">一个对象数组,其中包含零个或多个要设置格式的对象</param>
        protected override void PrimitiveAddLog(int skipFrames, LogLevel level, int eventId, object tag, Exception ex, string format, params object[] args)
        {
            try
            {
                if (!this.Enable || level < this.Level)
                {
                    return;
                }

                var item = new LogItem(DateTime.Now, Thread.CurrentThread, skipFrames, true, this.Name, level, eventId, tag, ex, format, args);
                if (this._thread)
                {
                    this._logDispatcherQueue.Enqueue(item);
                }
                else
                {
                    lock (this._lock)
                    {
                        this.RecordLogCallback(item);
                    }
                }
            }
            catch (Exception exi)
            {
                LogSysInnerLog.OnRaiseLog(this, exi);
            }
        }
示例#3
0
        private List <FileInfo> GetAllLogFileInfo()
        {
            List <FileInfo> srcFileInfos = new List <FileInfo>();

            try
            {
                if (this._pathItems.Length == 1)
                {
                    //存放于日志根目录
                    srcFileInfos.AddRange(base.RootDirectoryInfo.GetFiles(base._searchPattern, SearchOption.TopDirectoryOnly));
                }
                else
                {
                    //存放于需要实时创建目录的子目录
                    var dirInfos = base.RootDirectoryInfo.GetDirectories("*.*", SearchOption.TopDirectoryOnly);
                    foreach (var dirInfo in dirInfos)
                    {
                        try
                        {
                            srcFileInfos.AddRange(dirInfo.GetFiles(base._searchPattern, SearchOption.AllDirectories));
                        }
                        catch (Exception exi)
                        {
                            LogSysInnerLog.OnRaiseLog(this, exi);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                LogSysInnerLog.OnRaiseLog(this, ex);
            }

            return(srcFileInfos);
        }
示例#4
0
        /// <summary>
        /// 初始化
        /// </summary>
        private void Init()
        {
            this._fileLogWriter = null;
            var fileAppenderConfig = (FileAppenderConfig)base._config;

            this._fileAppenderConfig = fileAppenderConfig;
            var pathManager = new FileAppenderPathManager(this._fileAppenderConfig);

            switch (this._fileAppenderConfig.LockingModel)
            {
            case LockingModel.Exclusive:
                this._fileLogWriter = new ExclusiveFileLogWriter(fileAppenderConfig, pathManager);
                break;

            case LockingModel.Minimal:
                this._fileLogWriter = new MinimalFileLogWriter(fileAppenderConfig, pathManager);
                break;

            case LockingModel.InterProcess:
                this._fileLogWriter = new InterProcessFileLogWriter(fileAppenderConfig, pathManager);
                break;

            default:
                LogSysInnerLog.OnRaiseLog(this, new NotSupportedException(string.Format("不支持的锁模型:{0}", this._fileAppenderConfig.LockingModel.ToString())));
                break;
            }
        }
示例#5
0
        private void RecoverIndex()
        {
            try
            {
                string[] logFilePaths = Directory.GetFiles(base._rootDir, base._searchPattern, SearchOption.TopDirectoryOnly);
                int      index = 1, tmpIndex;
                string   indexStr;
                foreach (var logFilePath in logFilePaths)
                {
                    try
                    {
                        string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(logFilePath);
                        indexStr = fileNameWithoutExtension.Substring(this._fileNameWithoutExtension.Length);
                        if (int.TryParse(indexStr, out tmpIndex))
                        {
                            if (tmpIndex > index)
                            {
                                index = tmpIndex;
                            }
                        }
                    }
                    catch (Exception exi)
                    {
                        LogSysInnerLog.OnRaiseLog(this, exi);
                    }
                }

                this._index = index + 1;
            }
            catch (Exception ex)
            {
                LogSysInnerLog.OnRaiseLog(this, ex);
            }
        }
示例#6
0
        /// <summary>
        /// 清理过期的日志文件
        /// </summary>
        private void ClearExpireLogFile(string currentLogDir)
        {
            try
            {
                List <FileInfo> fileInfos = this.GetAllLogFileInfos();
                var             hsDelLogFileFullPathDirs = new HashSet <string>();

                //按日志保留天数删除
                base.DeleteLogFileByDays(fileInfos, hsDelLogFileFullPathDirs);

                //按日志文件个数删除日志
                base.DeleteLogFileByFileCount(fileInfos, hsDelLogFileFullPathDirs);

                //排除本次写日志目录
                if (hsDelLogFileFullPathDirs.Contains(currentLogDir))
                {
                    hsDelLogFileFullPathDirs.Remove(currentLogDir);
                }

                //删除空目录
                this.DeleteEmptyDirectory(hsDelLogFileFullPathDirs);
            }
            catch (Exception ex)
            {
                LogSysInnerLog.OnRaiseLog("清除过期日志异常", ex);
            }
        }
        /// <summary>
        /// 获取进程锁
        /// </summary>
        /// <returns>进程锁</returns>
        private Mutex GetMutex(string logFilePath)
        {
            string mutexName = logFilePath.Replace("\\", "_").Replace(":", "_").Replace("/", "_");
            Mutex  mutex     = null;

            while (mutex == null)
            {
                try
                {
                    //如果此命名互斥对象已存在则请求打开
                    try
                    {
                        //如果此命名互斥对象已存在则请求打开
                        mutex = Mutex.OpenExisting(mutexName);
                    }
                    catch (WaitHandleCannotBeOpenedException)
                    {
                        //打开失败则创建一个
                        mutex = new Mutex(false, mutexName);
                    }

                    mutex.WaitOne();
                }
                catch (Exception ex)
                {
                    LogSysInnerLog.OnRaiseLog(this, ex);
                    Thread.Sleep(10);
                }
            }

            return(mutex);
        }
        /// <summary>
        /// 日志输出
        /// </summary>
        /// <param name="logItem">要输出的日志项</param>
        internal void OnRaiseLogOutput(RedirectOuputItem logItem)
        {
            try
            {
                if (!string.IsNullOrEmpty(this._loggerName) &&
                    !string.Equals(this._loggerName, logItem.Item.LogerName))
                {
                    //日志记录器名称不为空或null,且与产生日志的日志记录器名称不匹配,直接返回
                    return;
                }

                if (!string.IsNullOrEmpty(this._appenderName) &&
                    !string.Equals(this._appenderName, logItem.AppenderName))
                {
                    //日志重定制追加器名称不为空或null,且与重定向日志追加器名称不匹配,直接返回
                    return;
                }

                var handler = this._logOutput;
                if (handler == null || logItem == null)
                {
                    //重定向委托为空,直接返回
                    return;
                }

                handler(logItem);
            }
            catch (Exception ex)
            {
                LogSysInnerLog.OnRaiseLog(this, ex);
            }
        }
示例#9
0
        protected void DeleteLogFileByFileCount(List <FileInfo> fileInfos, HashSet <string> hsDelLogFileFullPathDirs)
        {
            if (this._config.MaxFileCount < 1 || fileInfos.Count < this._config.MaxFileCount)
            {
                return;
            }

            int delCount = fileInfos.Count - this._config.MaxFileCount;

            if (delCount < 1)
            {
                return;
            }

            var delFileInfos = fileInfos.OrderBy(t => { return(t.LastWriteTime); }).Take(delCount).ToArray();

            foreach (var delFileInfo in delFileInfos)
            {
                try
                {
                    delFileInfo.Delete();
                    if (hsDelLogFileFullPathDirs != null)
                    {
                        hsDelLogFileFullPathDirs.Add(delFileInfo.Directory.FullName);
                    }
                }
                catch (Exception ex)
                {
                    LogSysInnerLog.OnRaiseLog(this, ex);
                }
            }
        }
示例#10
0
        /// <summary>
        /// 日志输出线程方法
        /// </summary>
        /// <param name="obj">参数</param>
        private static void LogOutputThreadMethod(object obj)
        {
            var token = _cts.Token;
            RedirectOuputItem item;

            while (!token.IsCancellationRequested)
            {
                try
                {
                    if (_logOutputQueue.Count == 0)
                    {
                        _logOutputAutoResetEvent.WaitOne();
                    }

                    if (_logOutputQueue.Count == 0)
                    {
                        continue;
                    }

                    if (_logOutputQueue.TryDequeue(out item))
                    {
                        LogOutput(item);
                    }
                }
                catch (Exception ex)
                {
                    LogSysInnerLog.OnRaiseLog(null, ex);
                }
            }
        }
示例#11
0
        protected string GetLastWriteLogFilePath(string dir)
        {
            try
            {
                string[] filePaths = Directory.GetFiles(dir, this._searchPattern, SearchOption.TopDirectoryOnly);
                if (filePaths.Length == 0)
                {
                    return(null);
                }


                DateTime           currenttime   = DateTime.Now;
                TimeSpan           tsCurrentTime = currenttime - this._defaultTime;
                DateTime           createTime;
                TimeSpan           tsCreateTime;
                List <LogFileInfo> orderLogFilePathList = new List <LogFileInfo>();

                foreach (var filePath in filePaths)
                {
                    if (this.CheckPath(filePath, out createTime))
                    {
                        //createTime = File.GetCreationTime(filePath);
                        if ((currenttime - createTime).Days > 2)
                        {
                            //如果日志文件时间在两天之外,不作为参考
                            continue;
                        }

                        tsCreateTime = createTime - this._defaultTime;
                        if (tsCreateTime.TotalDays <= tsCurrentTime.TotalDays)
                        {
                            orderLogFilePathList.Add(new LogFileInfo(createTime, filePath));
                        }
                    }
                }

                if (orderLogFilePathList.Count == 0)
                {
                    //当前日志目录下没有符合路径标准的日志文件
                    return(null);
                }

                var lastLogFilePath = orderLogFilePathList.OrderByDescending(t => { return(t.CreateTime); }).FirstOrDefault().FilePath;
                if (this.CompareLastLogFilePath(new FileInfo(lastLogFilePath)))
                {
                    //最后一个文件符合追加
                    return(lastLogFilePath);
                }
                else
                {
                    //最后一个文件不符合追加
                    return(null);
                }
            }
            catch (Exception ex)
            {
                LogSysInnerLog.OnRaiseLog("获取最后一个日志文件路径异常", ex);
                return(null);
            }
        }
 /// <summary>
 /// 释放进程锁
 /// </summary>
 /// <param name="mutex">进程锁</param>
 private void ReleaseMutex(Mutex mutex)
 {
     try
     {
         if (mutex != null)
         {
             mutex.ReleaseMutex();
         }
     }
     catch (Exception ex)
     {
         LogSysInnerLog.OnRaiseLog(this, ex);
     }
 }
示例#13
0
        private static void CreateAppender(XElement appenderEle, Loger loger)
        {
            string appenderName = LogUtil.GetAttributeValue(appenderEle, "name");

            try
            {
                string appenderTypeName = LogUtil.GetAttributeValue(appenderEle, "type");
                if (string.IsNullOrWhiteSpace(appenderTypeName))
                {
                    return;
                }

                appenderTypeName = appenderTypeName.Trim();
                AppenderBase appender;
                if (appenderTypeName.Length == 1)
                {
                    appender = CreateAppenderByAppenderPattern(appenderTypeName, appenderEle);
                }
                else
                {
                    if (!appenderTypeName.Contains('.') && !appenderTypeName.Contains(','))
                    {
                        Type appenderBaseType = typeof(AppenderBase);
                        appenderTypeName = string.Format("{0}.{1},{2}", appenderBaseType.Namespace, appenderTypeName, Path.GetFileName(appenderBaseType.Assembly.Location));
                    }

                    Type appenderType = LogUtil.GetType(appenderTypeName);
                    if (appenderType == null)
                    {
                        return;
                    }

                    appender = Activator.CreateInstance(appenderType, new object[] { (object)appenderEle }) as AppenderBase;
                }

                if (appender == null)
                {
                    return;
                }

                appender.Name = appenderName;
                loger._appenders.Add(appender);
            }
            catch (Exception ex)
            {
                LogSysInnerLog.OnRaiseLog(string.Format("解析:{0}日志追加器异常", appenderName), ex);
            }
        }
示例#14
0
        /// <summary>
        /// 加载配置,加载前清空旧的配置
        /// </summary>
        /// <param name="configFilePath">配置文件路径</param>
        public static void LoadConfig(string configFilePath)
        {
            if (!File.Exists(configFilePath))
            {
                return;
            }

            try
            {
                var xdoc = XDocument.Load(configFilePath);
                PrimitiveLoadConfig(xdoc);
            }
            catch (Exception ex)
            {
                LogSysInnerLog.OnRaiseLog("加载配置文件异常", ex);
            }
        }
示例#15
0
        /// <summary>
        /// 写日志
        /// </summary>
        /// <param name="item">日志项</param>
        protected override void PrimitiveWriteLog(LogItem item)
        {
            try
            {
                if (this._consoleAppenderConfig == null || !base.Validate(this._consoleAppenderConfig, item))
                {
                    return;
                }

                string logMsg = base.LayoutLog(item);
                Console.WriteLine(logMsg);
            }
            catch (Exception ex)
            {
                LogSysInnerLog.OnRaiseLog(this, ex);
            }
        }
示例#16
0
 public FileLogWriterBase(FileAppenderConfig fileAppenderConfig, FileAppenderPathManager pathManager)
 {
     this._fileAppenderConfig = fileAppenderConfig;
     this._pathManager        = pathManager;
     try
     {
         Type type = LogUtil.GetType(fileAppenderConfig.SecurityPolicy);
         if (type != null && type.GetInterface(typeof(ILogSecurityPolicy).FullName) != null)
         {
             this._securityPolicy = Activator.CreateInstance(type) as ILogSecurityPolicy;
         }
     }
     catch (Exception ex)
     {
         LogSysInnerLog.OnRaiseLog(this, ex);
     }
 }
示例#17
0
        private void ClearExpireLogFile(string currentLogDir)
        {
            try
            {
                List <FileInfo> fileInfos = this.GetAllLogFileInfos();

                //按日志保留天数删除
                base.DeleteLogFileByDays(fileInfos, null);

                //按日志文件个数删除日志
                base.DeleteLogFileByFileCount(fileInfos, null);
            }
            catch (Exception ex)
            {
                LogSysInnerLog.OnRaiseLog("清除过期日志异常", ex);
            }
        }
示例#18
0
        private static void SAddLog(LogLevel level, int eventId, object tag, Exception ex, string format, params object[] args)
        {
            try
            {
                var loger = _defaultLoger as LogerBase;
                if (loger == null)
                {
                    return;
                }

                loger.ObjectAddLog(level, eventId, tag, ex, format, args);
            }
            catch (Exception exi)
            {
                LogSysInnerLog.OnRaiseLog(null, exi);
            }
        }
示例#19
0
        /// <summary>
        /// 获取类型名称字符串
        /// </summary>
        /// <param name="type">类型</param>
        /// <returns>类型名称字符串</returns>
        private string GetTypeNameStr(Type type)
        {
            string typeNameStr;

            try
            {
                if (type.IsPrimitive)
                {
                    typeNameStr = type.Name;
                }
                else
                {
                    if (type.IsGenericType)
                    {
                        int splitIndex = type.Name.IndexOf('`');
                        if (splitIndex < 1)
                        {
                            typeNameStr = type.FullName;
                        }
                        else
                        {
                            typeNameStr = type.Name.Substring(0, splitIndex);
                        }
                    }
                    else
                    {
                        if (TypeCode.String == Type.GetTypeCode(type))
                        {
                            typeNameStr = type.Name;
                        }
                        else
                        {
                            typeNameStr = type.FullName;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                LogSysInnerLog.OnRaiseLog(null, ex);
                typeNameStr = type.FullName;
            }

            return(typeNameStr);
        }
示例#20
0
        private static void StaticStructLoadLogConfig()
        {
            try
            {
                const string logConfigFileName = LogConstant.DEFAULT_CONFIG_FILE_NAME;
                if (File.Exists(logConfigFileName))
                {
                    LoadConfig(logConfigFileName);
                }
                else
                {
                    string[] xmlFilePathArr = Directory.GetFiles(LogConstant.CurrentAssemblyDirectory, "*.xml", SearchOption.TopDirectoryOnly);
                    if (xmlFilePathArr.Length == 0)
                    {
                        CreateDefaultLoger();
                    }
                    else
                    {
                        foreach (var xmlFilePath in xmlFilePathArr)
                        {
                            try
                            {
                                var xdoc = XDocument.Load(xmlFilePath);
                                if (PrimitiveLoadConfig(xdoc))
                                {
                                    return;
                                }
                            }
                            catch (Exception exi)
                            {
                                LogSysInnerLog.OnRaiseLog($"加载日志配置[{xmlFilePath}]异常", exi);
                            }
                        }

                        LogSysInnerLog.OnRaiseLog("没有可用的日志配置文件,使用默认配置", null);
                        CreateDefaultLoger();
                    }
                }
            }
            catch (Exception ex)
            {
                CreateDefaultLoger();
                LogSysInnerLog.OnRaiseLog("加载日志配置异常,使用默认配置", ex);
            }
        }
示例#21
0
 private void RecordLogCallback(LogItem item)
 {
     item.LogProcess();
     lock (base._appendersLock)
     {
         foreach (var appender in base._appenders)
         {
             try
             {
                 appender.WriteLog(item);
             }
             catch (Exception exi)
             {
                 LogSysInnerLog.OnRaiseLog(this, exi);
             }
         }
     }
 }
示例#22
0
        private void GenerateContent(Exception ex)
        {
            StringBuilder sbContent = new StringBuilder();
            string        message   = this.Format;

            if (!string.IsNullOrEmpty(message))
            {
                if (this.Args != null && this.Args.Length > 0)
                {
                    try
                    {
                        message = string.Format(message, this.Args);
                    }
                    catch (Exception exi)
                    {
                        LogSysInnerLog.OnRaiseLog(this, exi);
                    }
                }

                sbContent.Append(message);
            }
            this.Message = message;

            if (ex != null)
            {
                if (sbContent.Length > 0)
                {
                    sbContent.Append("。");
                }

                Exception innerEx = ex;
                while (innerEx != null)
                {
                    sbContent.Append(string.Format("{0}: {1}", innerEx.GetType().FullName, innerEx.Message));
                    innerEx = innerEx.InnerException;
                    if (innerEx != null)
                    {
                        sbContent.Append(" ---> ");
                    }
                }
            }

            this.Content = sbContent.ToString();
        }
示例#23
0
        /// <summary>
        /// 获得方法参数字符串
        /// </summary>
        /// <param name="parameters">参数数组</param>
        /// <returns>方法参数字符串</returns>
        private string GetMethodParamtersString(ParameterInfo[] parameters)
        {
            StringBuilder sbParameter = new StringBuilder();
            bool          getStackTraceMethodParameterNameType = _getStackTraceMethodParameterNameType;
            StringBuilder sbGenericTypeParameter = new StringBuilder();
            string        parameterTypeName;

            foreach (ParameterInfo parameter in parameters)
            {
                if (getStackTraceMethodParameterNameType)
                {
                    if (parameter.ParameterType.IsGenericType)
                    {
                        try
                        {
                            sbGenericTypeParameter.Clear();
                            this.AppendGenericArgumentType(sbGenericTypeParameter, parameter.ParameterType);
                            parameterTypeName = sbGenericTypeParameter.ToString();
                        }
                        catch (Exception ex)
                        {
                            parameterTypeName = this.GetTypeNameStr(parameter.ParameterType);
                            LogSysInnerLog.OnRaiseLog(null, ex);
                        }
                    }
                    else
                    {
                        parameterTypeName = this.GetTypeNameStr(parameter.ParameterType);
                    }
                }
                else
                {
                    parameterTypeName = parameter.ParameterType.Name;
                }

                sbParameter.Append(parameterTypeName);
                sbParameter.Append(MethodParameterTypeParameterNameSpacing);
                sbParameter.Append(parameter.Name);
                sbParameter.Append(MethodParameterSpacing);
            }

            sbParameter = sbParameter.Remove(sbParameter.Length - MethodParameterSpacing.Length, MethodParameterSpacing.Length);
            return(sbParameter.ToString());
        }
示例#24
0
        private void DeleteEmptyDirectory(HashSet <string> hsDelLogFileFullPathDirs)
        {
            if (hsDelLogFileFullPathDirs.Count == 0)
            {
                return;
            }

            foreach (var delLogFileFullPathDir in hsDelLogFileFullPathDirs)
            {
                try
                {
                    //级联删除空目录
                    var delDirInfo = new DirectoryInfo(delLogFileFullPathDir);
                    while (true)
                    {
                        if (!delDirInfo.Exists)
                        {
                            delDirInfo = delDirInfo.Parent;
                            continue;
                        }

                        if (delDirInfo.GetFileSystemInfos("*.*", SearchOption.AllDirectories).Length == 0)
                        {
                            delDirInfo.Delete();
                        }
                        else
                        {
                            break;
                        }

                        delDirInfo = delDirInfo.Parent;
                        if (string.Equals(this._rootDir, delDirInfo.FullName, StringComparison.OrdinalIgnoreCase))
                        {
                            break;
                        }
                    }
                }
                catch (Exception ex)
                {
                    LogSysInnerLog.OnRaiseLog(this, ex);
                }
            }
        }
示例#25
0
        /// <summary>
        /// 释放日志资源
        /// </summary>
        public static void Release()
        {
            try
            {
                foreach (var loger in _logerDic.Values)
                {
                    loger.Dispose();
                }

                if (_defaultLoger != null)
                {
                    _defaultLoger.Dispose();
                }
            }
            catch (Exception ex)
            {
                LogSysInnerLog.OnRaiseLog(null, ex);
            }
        }
示例#26
0
        /// <summary>
        /// 写日志
        /// </summary>
        /// <param name="item">日志项</param>
        protected override void PrimitiveWriteLog(LogItem item)
        {
            try
            {
                if (this._fileAppenderConfig == null ||
                    this._fileLogWriter == null ||
                    !base.Validate(this._fileAppenderConfig, item) ||
                    !this._fileAppenderConfig.Enable)
                {
                    return;
                }

                string logMsg = base.LayoutLog(item);
                this._fileLogWriter.WriteLog(new LogMessageItem(item.LogerName, logMsg));
            }
            catch (Exception ex)
            {
                LogSysInnerLog.OnRaiseLog(this, ex);
            }
        }
示例#27
0
        /// <summary>
        /// 写日志
        /// </summary>
        /// <param name="item">日志项</param>
        protected override void PrimitiveWriteLog(LogItem item)
        {
            try
            {
                if (this._redirectAppendConfig == null ||
                    !base.Validate(this._redirectAppendConfig, item))
                {
                    return;
                }

                var handler = this.RedirectOuput;
                if (handler != null)
                {
                    handler(this, new RedirectOuputArgs(item));
                }
            }
            catch (Exception ex)
            {
                LogSysInnerLog.OnRaiseLog(this, ex);
            }
        }
示例#28
0
        protected void DeleteLogFileByDays(List <FileInfo> fileInfos, HashSet <string> hsDelLogFileFullPathDirs)
        {
            int days = this._config.Days;

            if (days < 1)
            {
                return;
            }

            var currentClearTime = DateTime.Now;

            if (currentClearTime.Year != this._lastClearExpireDaysTime.Year ||
                currentClearTime.Month != this._lastClearExpireDaysTime.Month ||
                currentClearTime.Day != this._lastClearExpireDaysTime.Day)
            {
                TimeSpan tsDuration;
                foreach (var fileInfo in fileInfos.ToArray())
                {
                    tsDuration = currentClearTime - fileInfo.LastWriteTime;
                    if (tsDuration.TotalDays - days > 0)
                    {
                        try
                        {
                            fileInfo.Delete();
                            fileInfos.Remove(fileInfo);
                            if (hsDelLogFileFullPathDirs != null)
                            {
                                hsDelLogFileFullPathDirs.Add(fileInfo.Directory.FullName);
                            }
                        }
                        catch (Exception ex)
                        {
                            LogSysInnerLog.OnRaiseLog(this, ex);
                        }
                    }
                }

                this._lastClearExpireDaysTime = currentClearTime;
            }
        }
示例#29
0
        /// <summary>
        /// 线程方法
        /// </summary>
        private void LogThreadMethod()
        {
            try
            {
                T   item;
                var token = this._cts.Token;
                while (!token.IsCancellationRequested)
                {
                    try
                    {
                        if (this._queue.Count == 0)
                        {
                            try
                            {
                                this._enqueueEventHandler.WaitOne();
                                continue;
                            }
                            catch (ObjectDisposedException)
                            {
                                break;
                            }
                        }

                        if (this._queue.TryDequeue(out item))
                        {
                            this._processAction(item);
                        }
                    }
                    catch (Exception ex)
                    {
                        LogSysInnerLog.OnRaiseLog(this, ex);
                    }
                }
            }
            catch (Exception e)
            {
                LogSysInnerLog.OnRaiseLog(this, e);
            }
        }
示例#30
0
        /// <summary>
        /// 释放资源方法
        /// </summary>
        /// <param name="isDisposing">是否释放标识</param>
        protected override void Dispose(bool isDisposing)
        {
            if (this._thread)
            {
                this._logDispatcherQueue.Dispose();
            }

            lock (this._appendersLock)
            {
                foreach (var appender in this._appenders)
                {
                    try
                    {
                        appender.Dispose();
                    }
                    catch (Exception ex)
                    {
                        LogSysInnerLog.OnRaiseLog(this, ex);
                    }
                }
            }
        }