/// <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***"); }
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 ***********************"); } }
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; } }