/// <summary> /// /// </summary> /// <param name="mExLogAttr"></param> /// <param name="job"></param> /// <param name="MethodName"></param> /// <param name="ex"></param> /// <param name="errorLevel"></param> private void WriteExLog( WriteExceptionLogAttribute mExLogAttr, JobData job, string MethodName, Exception ex, ErrorLevelAttribute errorLevel) { Logger loggerInnerEx = null; int entry = (int)mExLogAttr.WriteLogType; switch (entry) { case 1: //動態取得 FileLog 的 NLog Configuration. loggerInnerEx = NLogHelper.GetErrorFileLogConfig(LogLevel.Error); LoggerExWriter(job, loggerInnerEx, MethodName, ex, errorLevel); break; case 2: //動態取得 EventLog 的 NLog Configuration. loggerInnerEx = NLogHelper.GetEventLogConfig(LogLevel.Error); LoggerExWriter(job, loggerInnerEx, MethodName, ex, errorLevel); break; case 4: //動態取得 EMailLog 的 NLog Configuration. loggerInnerEx = NLogHelper.GetEMailLogConfig(LogLevel.Error); LoggerExWriter(job, loggerInnerEx, MethodName, ex, errorLevel); break; case 3: //同時寫 FileLog & 寫 EventLog. //動態取得 FileLog 的 NLog Configuration. //logger = NLogHelper.GetErrorFileLogConfig(LogLevel.Error); ////寫入錯誤的 FileLog //LoggerExWriter(loadClass, MethodName, ex, errorLevel, LoginName, ParamName); ////動態取得 EventLog 的 NLog Configuration. loggerInnerEx = NLogHelper.GetEventLogConfig(LogLevel.Error); LoggerExWriter(job, loggerInnerEx, MethodName, ex, errorLevel); break; case 6: //同時寫 EventLog & Send EMail. //動態取得 EventLog 的 NLog Configuration. //logger = NLogHelper.GetEventLogConfig(LogLevel.Error); //LoggerExWriter(loadClass, MethodName, ex, errorLevel, LoginName, ParamName); ////動態取得 EMailLog 的 NLog Configuration. loggerInnerEx = NLogHelper.GetEMailLogConfig(LogLevel.Error); LoggerExWriter(job, loggerInnerEx, MethodName, ex, errorLevel); break; case 7: //同時寫 FileLog & EventLog & Send EMail. break; } }
private void LoggerExWriter( JobData job, Logger logger, string MethodName, Exception ex, ErrorLevelAttribute errorLevel) { //將 Error Log 寫入到 FileSystem 中或 EventLog 事件檢視器中 或 透過 EMail 的方式寄出. if (errorLevel.ErrorLevelType == LevelType.Error) { logger.Error(string.Format("[{0}].{1}.{2} Execute fail... Detailed error:{3}", job.JobName, "[DotJob]", MethodName, ex)); } else if (errorLevel.ErrorLevelType == LevelType.Fatal) { logger.Fatal(string.Format("[{0}].{1}.{2} Execute fail... Detailed error:{3}", job.JobName, "[DotJob]", MethodName, ex)); } }
//protected static Logger LOG = NLog.LogManager.GetCurrentClassLogger(); /// <summary> /// 主要執行的 Method 入口 /// <param name="job">目前執行的 Job 相關資料.</param> /// <param name="writeLogAttr">WriteLog 的設定相關資料</param> /// <param name="writeExAttr">WriteExLog 的設定相關資料</param> /// </summary> public virtual void DoJob( JobData job, LogAttributeData <WriteLogAttribute> writeLogAttr, LogAttributeData <WriteExceptionLogAttribute> writeExAttr, LogAttributeData <ErrorLevelAttribute> errorLevelAttr, Logger loggerInner, Logger loggerInnerErr) { #region NLog 相關物件 //Logger loggerInner = NLogHelper.GetFileLogConfig(LogLevel.Info); //Logger loggerInnerErr = NLogHelper.GetErrorFileLogConfig(LogLevel.Error); #endregion WriteLogAttribute LogAttr = null; WriteExceptionLogAttribute LogExAttr = null; ErrorLevelAttribute ErrLevelAttr = null; System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); sw.Reset(); //碼表歸零 sw.Start(); //碼表開始計時 //loggerInner.Info("[DoJob] Start"); try { LogAttr = writeLogAttr.GetBeforePrepareAttr(); //取得當前的 BeforPrepare 方法是否有設定 WriteLogAttribute. if (LogAttr != null) { WriteInfo(LogAttr, job, "[BeforePrepare] Start..."); } BeforePrepare(); if (LogAttr != null) { loggerInner.Info(string.Format("[{0}].{1}.{2} Completed... total {3}", job.JobName, "[DotJob]", "[BeforePrepare]", sw.Elapsed.TotalMilliseconds.ToString())); } } catch (Exception ex) { ErrLevelAttr = errorLevelAttr.GetBeforePrepareAttr(); //取得當前的 BeforPrepare 方法是否有設定 ErrorLevelAttribute. LogExAttr = writeExAttr.GetBeforePrepareAttr(); //取得當前的 BeforPrepare 方法是否有設定 WriteExceptionLogAttribute. if (LogExAttr != null) { WriteExLog(LogExAttr, job, "[BeforePrepare]", ex, ErrLevelAttr); } throw ex; } try { LogAttr = writeLogAttr.GetPrepareDataMethodAttr(); if (LogAttr != null) { WriteInfo(LogAttr, job, "[PrepareData] Start..."); } PrepareData(); if (LogAttr != null) { loggerInner.Info(string.Format("[{0}].{1}.{2} Completed... total {3}", job.JobName, "[DotJob]", "[PrepareData]", sw.Elapsed.TotalMilliseconds.ToString())); } } catch (Exception ex) { ErrLevelAttr = errorLevelAttr.GetPrepareDataMethodAttr(); //取得當前的 PrepareData 方法是否有設定 ErrorLevelAttribute. LogExAttr = writeExAttr.GetPrepareDataMethodAttr(); //取得當前的 PrepareData 方法是否有設定 WriteExceptionLogAttribute. if (LogExAttr != null) { WriteExLog(LogExAttr, job, "[PrepareData]", ex, ErrLevelAttr); } throw ex; } try { LogAttr = writeLogAttr.GetProcessDataMethodAttr(); if (LogAttr != null) { WriteInfo(LogAttr, job, "[ProcessData] Start..."); } ProcessData(); if (LogAttr != null) { loggerInner.Info(string.Format("[{0}].{1}.{2} Completed... total {3}", job.JobName, "[DotJob]", "[ProcessData]", sw.Elapsed.TotalMilliseconds.ToString())); } } catch (Exception ex) { ErrLevelAttr = errorLevelAttr.GetProcessDataMethodAttr(); //取得當前的 ProcessData 方法是否有設定 ErrorLevelAttribute. LogExAttr = writeExAttr.GetProcessDataMethodAttr(); //取得當前的 ProcessData 方法是否有設定 WriteExceptionLogAttribute. if (LogExAttr != null) { WriteExLog(LogExAttr, job, "[ProcessData]", ex, ErrLevelAttr); } throw ex; } try { LogAttr = writeLogAttr.GetAfterProcessMethodAttr(); if (LogAttr != null) { WriteInfo(LogAttr, job, "[AfterProcess] Start..."); } AfterProcess(); if (LogAttr != null) { loggerInner.Info(string.Format("[{0}].{1}.{2} End... total {3}", job.JobName, "[DotJob]", "[AfterProcess]", sw.Elapsed.TotalMilliseconds.ToString())); } } catch (Exception ex) { ErrLevelAttr = errorLevelAttr.GetAfterProcessMethodAttr(); //取得當前的 AfterProcess 方法是否有設定 ErrorLevelAttribute. LogExAttr = writeExAttr.GetAfterProcessMethodAttr(); //取得當前的 AfterProcess 方法是否有設定 WriteExceptionLogAttribute. if (LogExAttr != null) { WriteExLog(LogExAttr, job, "[AfterProcess]", ex, ErrLevelAttr); } throw ex; } sw.Stop();//碼錶停止 }