예제 #1
0
        /// <summary>
        ///  指定文字列を読込んで、対応する時間を取得する
        /// </summary>
        /// <param name="mc">正規で検索した文字列</param>
        /// <param name="fileContent">ファイル内容</param>
        private void GetTimeForContent(System.Text.RegularExpressions.MatchCollection mc, string fileContent)
        {
            _logger.Debug("***GetTimeForContent START***");

            string strRtn     = string.Empty;
            string strContent = string.Empty;

            // 指定検索内容情報初期化
            SearchContentInfo selContentInfo = null;

            string strDateTime = string.Empty;

            foreach (System.Text.RegularExpressions.Match m in mc)
            {
                // 指定キーによって対応内容をリストへ格納する
                selContentInfo = new SearchContentInfo();

                selContentInfo.selConStartIndex  = m.Index;
                selContentInfo.selTimeStartIndex = fileContent.IndexOf("DateTime", m.Index + REGEX.Length + 1);
                strDateTime = fileContent.Substring(selContentInfo.selTimeStartIndex + 9, 34);
                selContentInfo.selConForTime = DateTime.Parse(strDateTime);

                lstSelContentInfo.Add(selContentInfo);
            }

            _logger.Debug("***GetTimeForContent END***");
        }
예제 #2
0
        static void Main(string[] args)
        {
            // ログ開始
            _logger.Info("********************* Program Start *********************");

            // 異常発生フラグ
            bool bErrFlg = false;

            try
            {
                LogRead logRead = new LogRead();

                // 指定文字列を探して、対応する時間を探す
                logRead.FindContentForKey();

                if (logRead.lstSelContentInfo != null && logRead.lstSelContentInfo.Count > 0)
                {
                    // 対応する時間を繰り返して、時間間隔が10分を超える場合、
                    // サーバをRestartして、処理終了する
                    for (int index = logRead.lstSelContentInfo.Count - 1; index >= 0; index--)
                    {
                        SearchContentInfo item = (SearchContentInfo)logRead.lstSelContentInfo[index];

                        // 取得した時間が前回タスク間隔+指定内容を現れる間隔を超える場合、
                        // ループ終了
                        TimeSpan ts1 = logRead.statrDatetime - item.selConForTime;
                        if (ts1.TotalMinutes > logRead.iTaskExeInterval + logRead.iSpeContentInter)
                        {
                            // ログ終了
                            _logger.Info("cc-error日誌文件中最新出現的36175錯誤訊息間隔,未符合【當前的時間 - 最新出現的錯誤時間 > 計劃任務執行間隔 + 日誌文件中指定內容出現間隔】,按照未發現異常處理!");
                            break;
                        }

                        // 末尾のレコードの場合、ループ終了
                        if (index == 0)
                        {
                            break;
                        }

                        SearchContentInfo itemNext = (SearchContentInfo)logRead.lstSelContentInfo[index - 1];

                        TimeSpan ts2 = item.selConForTime - itemNext.selConForTime;
                        if (ts2.TotalMinutes >= logRead.iSpeContentInter)
                        {
                            // サーバRestart batファイルを実行する
                            ExecuteBatFileSc();

                            // 異常発生
                            bErrFlg = true;
                            break;
                        }
                    }
                    if (!bErrFlg)
                    {
                        // ログ終了
                        _logger.Info("指定時間間隔內監視cc-error日誌文件未發現異常!");
                    }
                }
                else
                {
                    // ログ終了
                    _logger.Info("監視cc-error日誌文件未發現異常!");
                }

                // 指定時間後にして、失敗したサービスを再実行する
                DoErrServicerRestartSc();
            }
            catch (Exception ex)
            {
                _logger.Error("預期以外錯誤發生,請查看下面詳細日誌內容!");
                _logger.Error(ex.Message);
            }
            finally
            {
                // ログ終了
                _logger.Info("********************* Program End ***********************");
            }
        }
예제 #3
0
        public void FindContentForKey()
        {
            // 入力ファイルのディレクトリ名
            string strInputFilePath = string.Empty;

            // 入力ファイルのファイル名
            string strInputFileNm = string.Empty;

            // 入力ファイルの接頭語
            string strInFilePrefix = string.Empty;

            try
            {
                _logger.Debug("***FindContentForKey START***");

                // 入力パラメータから入力ファイルのディレクトリ名情報を取得する
                strInputFilePath = ConfigurationManager.AppSettings["InputPath"];

                // 入力ファイルのフォルダ存在の妥当性チェック
                if (!Directory.Exists(strInputFilePath))
                {
                    _logger.Error("指定輸入路徑不存在!請確認!");
                    return;
                }

                // 入力パラメータからファイルの接頭語を取得する
                strInFilePrefix = ConfigurationManager.AppSettings["InputFilePrefix"];

                // ファイル名正規表示初期化
                string strRegexFileNm = doRegexFileNm(strInFilePrefix);

                // フォルダ内のファイル名をワイルドコードで検索し、更に正規表現で検索する。
                string[] files = FindFiles(strInputFilePath, strRegexFileNm, "*.log", true);

                // 検索したファイルをループして、指定内容を探す
                System.Text.RegularExpressions.MatchCollection mc = null;
                string fileContent = string.Empty;

                // 指定検索内容情報リスト初期化
                lstSelContentInfo = new List <SearchContentInfo>();

                // 正規表現でファイルタイプ
                string strDateOut = @"指定文字列對應時間-{0}:{1}";

                foreach (string file in files)
                {
                    _logger.Debug("讀取文件'" + Path.GetFileName(file) + "'");
                    _logger.Debug("文件路徑: '" + file + "'");
                    mc = ContainTextInFile(file, ref fileContent);

                    if (mc.Count > 0)
                    {
                        // 指定文字列が存在する場合、対応する時間を取得する
                        GetTimeForContent(mc, fileContent);

                        _logger.Info("'" + Path.GetFileName(file) + "'中指定文字列【" + REGEX + @"】存在!");
                        for (int index = lstSelContentInfo.Count - 1; index >= 0; index--)
                        {
                            SearchContentInfo item = (SearchContentInfo)lstSelContentInfo[index];

                            // 指定文字列対応時間を出力する
                            _logger.Info(string.Format(strDateOut, Convert.ToString(index + 1), item.selConForTime.ToString("O")));
                        }
                    }
                }

                _logger.Debug("***FindContentForKey END***");
            }
            catch (Exception)
            {
                _logger.Debug("***FindContentForKey ERR***");
                throw;
            }
        }