Beispiel #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="attr"></param>
        /// <param name="job"></param>
        /// <param name="MethodName"></param>
        private void WriteInfo(WriteLogAttribute attr, JobData job, string MethodName)
        {
            Logger loggerInner = null;
            int    entry       = (int)attr.WriteLogType;

            switch (entry)
            {
            case 1:
                //動態取得 FileLog 的 NLog Configuration.
                loggerInner = NLogHelper.GetFileLogConfig(LogLevel.Info);
                LoggerWriter(job, loggerInner, MethodName);
                break;

            case 2:
                //動態取得 EventLog 的 NLog Configuration.
                loggerInner = NLogHelper.GetEventLogConfig(LogLevel.Info);
                LoggerWriter(job, loggerInner, MethodName);
                break;

            case 4:
                //動態取得 EMailLog 的 NLog Configuration.
                loggerInner = NLogHelper.GetEMailLogConfig(LogLevel.Info);
                LoggerWriter(job, loggerInner, MethodName);
                break;

            case 3:     //同時寫 FileLog & 寫 EventLog.
                ////動態取得 EventLog 的 NLog Configuration.
                loggerInner = NLogHelper.GetEventLogConfig(LogLevel.Info);
                LoggerWriter(job, loggerInner, MethodName);
                break;

            case 6:     //同時寫 EventLog & Send EMail.
                ////動態取得 EMailLog 的 NLog Configuration.
                loggerInner = NLogHelper.GetEMailLogConfig(LogLevel.Info);
                LoggerWriter(job, loggerInner, MethodName);
                break;

            case 7:     //同時寫 FileLog & EventLog & Send EMail.
                ////動態取得 EMailLog 的 NLog Configuration.
                loggerInner = NLogHelper.GetEMailLogConfig(LogLevel.Info);
                LoggerWriter(job, loggerInner, MethodName);
                break;
            }
        }
Beispiel #2
0
        //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();//碼錶停止
        }