From 8f5c8891aba521570fa63c4baf616e3a3c8d9526 Mon Sep 17 00:00:00 2001
From: ulysseskao <ulysseskao@gmail.com>
Date: Sun, 01 May 2016 01:12:51 +0800
Subject: [PATCH] update for logger

---
 CCSTrace/CCS/Function/MailService.cs      |    3 
 CCSTrace/CCS/ProcessEvent.cs              |  123 +++---
 CCSTrace/CCS/Object/NumberContrast.cs     |    3 
 CCSTrace/Global.asax.cs                   |    6 
 CCSTrace/CCS/Object/EventQuery.cs         |   83 ----
 CCSTrace/CCS/CCSMain.cs                   |   98 +---
 CCSTrace/CCS/Object/EventRecord.cs        |    2 
 CCSTrace/CCS/EventAI/TraceSubject.cs      |   69 +--
 CCSTrace/CCS/Object/Dept_Contrast.cs      |    3 
 CCSTrace/CCS/Object/CCSCodelist.cs        |   41 +-
 CCSTrace/CCS/EventAI/JudgeCase.cs         |   65 +-
 CCSTrace/Service1.asmx.cs                 |    2 
 CCSTrace/CCS/RecordLog.cs                 |   23 
 CCSTrace/CCS/Function/InitialEventData.cs |   20 
 CCSTrace/CCS/Function/MergeCase.cs        |   15 
 CCSTrace/CCS/Object/CCSRecord.cs          |   26 -
 CCSTrace/CCS/FinishEvent.cs               |  199 +++++------
 CCSTrace/CCS/Object/AlarmData.cs          |   36 +-
 CCSTrace/CCS/Object/LocateEquipment.cs    |    3 
 CCSTrace/CCSTrace.csproj                  |    4 
 CCSTrace/CCS/Function/Leach.cs            |   82 ++--
 CCSTrace/CCS/Object/Addr_Contrast.cs      |   18 
 CCSTrace/NLog.config                      |   24 +
 CCSTrace/CCS/Object/EOSCodelist.cs        |   30 +
 24 files changed, 439 insertions(+), 539 deletions(-)

diff --git a/CCSTrace/CCS/CCSMain.cs b/CCSTrace/CCS/CCSMain.cs
index c824a21..cfff0ca 100644
--- a/CCSTrace/CCS/CCSMain.cs
+++ b/CCSTrace/CCS/CCSMain.cs
@@ -19,7 +19,7 @@
     {
         private const string DbConfigFilename = "DBConfig.xml";
 
-        private static Logger _logger = LogManager.GetCurrentClassLogger();
+        private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
         private static CcsMain _instance;
 
         public static ArrayList ProcessCases = new ArrayList();
@@ -29,7 +29,6 @@
 
         private int _connectionCount = 1;
         private OracleConnection _mainConn = null;
-        private SEventLog _mainLog = null;
 
         private SmartThreadPool _mainjobThreadPool = null;
         private readonly object _syncDbQueue = new object();
@@ -58,15 +57,17 @@
 
         public void Startup()
         {
-            _mainLog = new SEventLog();
+            Logger.Info("CCSMain Startup.");
 
             try
             {
                 ReadXml();
+                Logger.Info("CCSMain ReadXml Complete.");
 
                 if (_mainConn == null)
                     _mainConn = CreateConnection();
                 //MainConn = CreateMainConnection();
+                Logger.Info("CCSMain has been connected database.");
 
                 GlobalVariable.CcsCodelist = new CcsCodelist(_mainConn);
                 GlobalVariable.EosCodelist = new EosCodelist(_mainConn);
@@ -78,18 +79,11 @@
             }
             catch (Exception e)
             {
-                Console.WriteLine(e.Message);
-                Console.WriteLine(e.StackTrace);
-                _mainLog.Error(e.Message);
-
-                if (GlobalVariable.ShowError)
-                    _mainLog.Error(e.StackTrace);
-
+                Logger.Error(e, e.Message);
                 throw;
             }
             finally
             {
-                _mainLog.Close();
             }
 
             CcsRecord mRecord = GetWaitRecord(_mainConn);
@@ -106,6 +100,7 @@
             stpStartInfo.MaxWorkerThreads = GlobalVariable.MaxThreadSize;
             stpStartInfo.MinWorkerThreads = GlobalVariable.MinThreadSize;
             _mainjobThreadPool = new SmartThreadPool(stpStartInfo);
+            Logger.Info("Create Thread Pool.");
         }
 
         public void Shutdown()
@@ -116,8 +111,14 @@
             GC.Collect();
             GC.WaitForPendingFinalizers();
         }
+
         public void AcceptEvent(CcsRecord record)
         {
+            /*
+            WorkItemCallback workItemCallback = new WorkItemCallback(this.DoWork);
+            _mainjobThreadPool.QueueWorkItem(workItemCallback, record);
+            */
+
             int i = 0;
             int reConnectCount = 1;
 
@@ -134,7 +135,8 @@
 
                             if (mRecord != null)
                             {
-                                OracleConnection conn = _dbQueue.Dequeue();
+                                OracleConnection conn = null;
+                                lock (_syncDbQueue) conn = _dbQueue.Dequeue();
                                 ProcessCase(mRecord, conn);
                             }
                         }
@@ -142,8 +144,9 @@
                         break;
                     }
                 }
-                catch (Exception)
+                catch (Exception e)
                 {
+                    Logger.Error(e, e.Message);
                     if (_mainConn.State == ConnectionState.Closed)
                     {
                         i++;
@@ -216,7 +219,7 @@
             }
             catch (XmlException xe)
             {
-                Console.WriteLine(xe.StackTrace);
+                Logger.Error(xe, xe.Message);
                 reader?.Close();
             }
         }
@@ -237,14 +240,12 @@
 
             try
             {
-                _mainLog = new SEventLog();
-
-                if (conn.State.ToString().Equals("Closed"))
+                if (conn.State == ConnectionState.Closed)
                     conn.Open();
 
                 transaction = conn.BeginTransaction();
 
-                if (record.InsertDb(conn, transaction, _mainLog))
+                if (record.InsertDb(conn, transaction))
                 {
                     var eventQuery = new EventQuery
                     {
@@ -255,11 +256,11 @@
                     };
 
 
-                    if (eventQuery.Insert(_mainLog, conn, transaction))
+                    if (eventQuery.Insert(conn, transaction))
                         transaction.Commit();
                     else
                     {
-                        if (transaction.Connection.State.ToString().Equals("Open"))
+                        if (transaction.Connection.State == ConnectionState.Open)
                             transaction.Rollback();
 
                         throw new Exception("案件未受理成功。");
@@ -267,7 +268,7 @@
                 }
                 else
                 {
-                    if (transaction.Connection.State.ToString().Equals("Open"))
+                    if (transaction.Connection.State == ConnectionState.Open)
                         transaction.Rollback();
 
                     throw new Exception("案件未受理成功。");
@@ -275,35 +276,21 @@
             }
             catch (OracleException e)
             {
-                Console.WriteLine(e.Message);
-                Console.WriteLine(e.StackTrace);
-                _mainLog.Error(e.Message);
+                Logger.Error(e, e.Message);
 
-                if (GlobalVariable.ShowError)
-                    _mainLog.Error(e.StackTrace);
-
-                if (transaction != null && transaction.Connection.State.ToString().Equals("Open"))
+                if (transaction != null && (transaction.Connection.State == ConnectionState.Open))
                     transaction.Rollback();
 
                 throw;
             }
             catch (Exception ex)
             {
-                Console.WriteLine(ex.Message);
-                Console.WriteLine(ex.StackTrace);
-                _mainLog.Error(ex.Message);
+                Logger.Error(ex, ex.Message);
 
-                if (GlobalVariable.ShowError)
-                    _mainLog.Error(ex.StackTrace);
-
-                if (transaction != null && transaction.Connection.State.ToString().Equals("Open"))
+                if (transaction != null && (transaction.Connection.State == ConnectionState.Open))
                     transaction.Rollback();
 
                 throw;
-            }
-            finally
-            {
-                _mainLog.Close();
             }
 
             return true;
@@ -391,11 +378,7 @@
                 }
                 catch (Exception e)
                 {
-                    Log(e.Message);
-                    _mainLog.Error("無法取得等候處理CCS案件資料。錯誤訊息 = " + e.Message);
-
-                    if (GlobalVariable.ShowError)
-                        _mainLog.Error(e.StackTrace);
+                    Logger.Error(e, e.Message);
                 }
                 finally
                 {
@@ -405,7 +388,7 @@
             }
 
             if (ccsid.Length != 0)
-                record = new CcsRecord(ccsid, conn, _mainLog);
+                record = new CcsRecord(ccsid, conn);
 
             if (record != null)
             {
@@ -418,15 +401,15 @@
 
                 try
                 {
-                    if (eventQuery.UpdateCaseStatus(_mainLog, conn, transaction))
+                    if (eventQuery.UpdateCaseStatus(conn, transaction))
                     {
-                        _mainLog.Info("更新EVENTQUERY的案件狀態為處理中.(CCSID = " + record.CcsId + ")");
+                        Logger.Info("更新EVENTQUERY的案件狀態為處理中.(CCSID = " + record.CcsId + ")");
                         transaction.Commit();
                         ProcessCases.Add(record.CcsId);
                     }
                     else
                     {
-                        _mainLog.Error("無法更新EVENTQUERY的案件狀態.(CCSID = " + record.CcsId + ")");
+                        Logger.Error("無法更新EVENTQUERY的案件狀態.(CCSID = " + record.CcsId + ")");
 
                         if (transaction.Connection.State.ToString().Equals("Open"))
                             transaction.Rollback();
@@ -437,29 +420,12 @@
                     if (transaction.Connection.State.ToString().Equals("Open"))
                         transaction.Rollback();
 
-                    Log(e.Message);
+                    Logger.Error(e, e.Message);
                     record = null;
                 }
             }
 
             return record;
-        }
-
-        private void Log(string message)
-        {
-            RecordLog pLog = null;
-            try
-            {
-                pLog = new RecordLog(GlobalVariable.CcsListPath + "MAIN.txt");
-                pLog.Error(message);
-            }
-            finally
-            {
-                if (pLog != null)
-                {
-                    pLog.Close();
-                }
-            }
         }
     }
 }
\ No newline at end of file
diff --git a/CCSTrace/CCS/EventAI/JudgeCase.cs b/CCSTrace/CCS/EventAI/JudgeCase.cs
index c08d324..447c7d3 100644
--- a/CCSTrace/CCS/EventAI/JudgeCase.cs
+++ b/CCSTrace/CCS/EventAI/JudgeCase.cs
@@ -2,11 +2,14 @@
 
 using System.Collections;
 using System.Data.OracleClient;
+using NLog;
 
 namespace CCSTrace.CCS.EventAI
 {
     public class JudgeCase
     {
+        private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
+
         private TraceSubject _mTraceSubject;
         private readonly ArrayList _mCase = new ArrayList();
         private readonly int _damageFdrId;
@@ -23,12 +26,11 @@
 
         private readonly OracleConnection _connectionTpc;
         private readonly OracleTransaction _transaction;
-        private readonly RecordLog _pLog;
         private readonly string _traceConnectionString;
 
         // int Range = 360; //比事故案件還早多久時間內的案件才作合併 單位:分
 
-        public JudgeCase(int mFdrId, int mFsc, int mUfid, int mCaseId, string mAcceptDate, OracleConnection connection, OracleTransaction trx, string traceConnection, RecordLog log)
+        public JudgeCase(int mFdrId, int mFsc, int mUfid, int mCaseId, string mAcceptDate, OracleConnection connection, OracleTransaction trx, string traceConnection)
         {
             _damageFdrId = mFdrId;
             _damageFsc = mFsc;
@@ -39,12 +41,11 @@
             _connectionTpc = connection;
             _transaction = trx;
             _traceConnectionString = traceConnection;
-            _pLog = log;
         }
 
         public void AiBegin()
         {
-            _pLog.Info("進行案件追蹤合併.");
+            Logger.Info("進行案件追蹤合併.");
             // String ToTime = AcceptDate;
 
             var sqlStmt = "SELECT R.ACCEPTNUM,R.CASEID as CASEID,R.FDRID as FDRID,R.FSC as FSC,R.UFID as UFID,E.CASESTATUS as CASESTATUS,R.EVENTBRIEF as BRIEF "
@@ -56,7 +57,7 @@
 
             try
             {
-                _pLog.Info("搜尋同一饋線上可供合併之母案件.");
+                Logger.Info("搜尋同一饋線上可供合併之母案件.");
                 command = new OracleCommand(sqlStmt, _connectionTpc, _transaction);
                 reader = command.ExecuteReader();
 
@@ -75,15 +76,15 @@
                     record.Add(reader["BRIEF"].ToString());
                     record.Add(reader["ACCEPTNUM"].ToString());
                     _mCase.Add(record);
-                    _pLog.Info(record[7].ToString() + ", " + record[0]);
+                    Logger.Info(record[7].ToString() + ", " + record[0]);
                 }
                 reader.Close();
             }
             catch (Exception e)
             {
-                _pLog.Error(e.Message);
+                Logger.Error(e.Message);
                 Console.WriteLine(e.StackTrace);
-                _pLog.Error("尋找母案件時發生錯誤.");
+                Logger.Error("尋找母案件時發生錯誤.");
                 throw e;
             }
             finally
@@ -100,8 +101,8 @@
             {
                 _inferFsc = _damageFsc;
                 _inferUfid = _damageUfid;
-                _pLog.Info("此案件為饋線上第一件案件");
-                _pLog.Info("追蹤合併結束.");
+                Logger.Info("此案件為饋線上第一件案件");
+                Logger.Info("追蹤合併結束.");
                 return;
             }
 
@@ -118,8 +119,8 @@
                             _parentCaseId = Convert.ToInt32(((ArrayList)_mCase[i])[0].ToString());
                             _inferFsc = Convert.ToInt32(((ArrayList)_mCase[i])[2].ToString());
                             _inferUfid = Convert.ToInt32(((ArrayList)_mCase[i])[3].ToString());
-                            _pLog.Info("相同變壓器");
-                            _pLog.Info("與案件" + ((ArrayList)_mCase[i])[7] + "合併,故障點Fsc: " + _inferFsc + " Ufid: " + _inferUfid);
+                            Logger.Info("相同變壓器");
+                            Logger.Info("與案件" + ((ArrayList)_mCase[i])[7] + "合併,故障點Fsc: " + _inferFsc + " Ufid: " + _inferUfid);
                             return;
                         }
                     }
@@ -127,13 +128,13 @@
             }
             catch (Exception ex)
             {
-                _pLog.Error(ex.Message);
+                Logger.Error(ex.Message);
                 throw ex;
             }
-            _pLog.Info("不同變壓器,開始追蹤(New Version)...");
+            Logger.Info("不同變壓器,開始追蹤(New Version)...");
 
             TraceCase();
-            _pLog.Warn("追蹤合併結束");
+            Logger.Warn("追蹤合併結束");
         }
 
         private void TraceCase()
@@ -142,12 +143,12 @@
 
             try
             {
-                _mTraceSubject = new TraceSubject(_connectionTpc, _transaction, _traceConnectionString, _pLog);
-                _pLog.Info("TraceSubject Startup....");
+                _mTraceSubject = new TraceSubject(_connectionTpc, _transaction, _traceConnectionString);
+                Logger.Info("TraceSubject Startup....");
             }
             catch (Exception ex)
             {
-                _pLog.Error("TraceObject.dll無法初始化,請確認該元件是否存在或jre是否為 1.4 版,並確認是否註冊.");
+                Logger.Error("TraceObject.dll無法初始化,請確認該元件是否存在或jre是否為 1.4 版,並確認是否註冊.");
                 throw ex;
             }
 
@@ -155,7 +156,7 @@
             {
                 _mTraceSubject.StartTrace(_damageFsc, _damageUfid, true);
                 _newCase = _mTraceSubject.GetNewResult(); // 新案件所建出來的linkedlist(往上追到breaker)
-                _pLog.Info("追蹤新案件完成");
+                Logger.Info("追蹤新案件完成");
 
                 for (int i = 0; i < _mCase.Count; i++)
                 {
@@ -171,7 +172,7 @@
                         _mTraceSubject.StartTrace(Convert.ToInt32(((ArrayList)_mCase[i])[2].ToString()),
                                                        Convert.ToInt32(((ArrayList)_mCase[i])[3].ToString()), false);
                         _oldCase = _mTraceSubject.GetOldResult(); // 母案件所建出來的TreeMap(往上追到breaker)
-                        _pLog.Info("追蹤母案件完成");
+                        Logger.Info("追蹤母案件完成");
 
                         for (int j = 0; j < _newCase.Count; j++)
                         {
@@ -185,7 +186,7 @@
                                     _inferFsc = ((Equipment)_newCase[j]).Fsc;
                                     _inferUfid = ((Equipment)_newCase[j]).Ufid;
                                     _mEquip = (Equipment)((ArrayList)_mCase[i])[5];
-                                    _pLog.Info("與案件" + ((ArrayList)_mCase[i])[7] + "合併,故障點Fsc: " + _inferFsc + " Ufid: " + _inferUfid);
+                                    Logger.Info("與案件" + ((ArrayList)_mCase[i])[7] + "合併,故障點Fsc: " + _inferFsc + " Ufid: " + _inferUfid);
                                     return;
                                 }
                             }
@@ -193,15 +194,15 @@
                     }
                     else
                     {
-                        for (int k = 0; k < facilitySet.Count; k++)
+                        foreach (object t1 in facilitySet)
                         {
                             bool merge = false; // 損壞設備是否在所切開的設備下游
-                            Equipment damageEquipment = (Equipment)facilitySet[k]; // 切開的設備
+                            Equipment damageEquipment = (Equipment)t1; // 切開的設備
 
-                            for (int z = 0; z < _newCase.Count; z++)
+                            foreach (object t in _newCase)
                             {
-                                if ((((Equipment)_newCase[z]).Fsc== damageEquipment.Fsc) &&
-                                     (((Equipment)_newCase[z]).Ufid== damageEquipment.Ufid))
+                                if ((((Equipment)t).Fsc== damageEquipment.Fsc) &&
+                                    (((Equipment)t).Ufid== damageEquipment.Ufid))
                                 {
                                     merge = true;
                                     break;
@@ -217,18 +218,18 @@
                                     _inferFsc = damageEquipment.Fsc;
                                     _inferUfid = damageEquipment.Ufid;
                                     _mEquip = (Equipment)((ArrayList)_mCase[i])[5];
-                                    _pLog.Info("與案件" + ((ArrayList)_mCase[i])[7] + "合併,故障點Fsc: " + _inferFsc + " Ufid: " + _inferUfid);
+                                    Logger.Info("與案件" + ((ArrayList)_mCase[i])[7] + "合併,故障點Fsc: " + _inferFsc + " Ufid: " + _inferUfid);
                                     return;
                                 }
                             }
-                        } // for loop(k)
+                        }
                     } // else
                 } // for loop(i)
             }
             catch (Exception ex)
             {
-                _pLog.Error(ex.Message);
-                _pLog.Error("追蹤時發生錯誤.");
+                Logger.Error(ex, ex.Message);
+                Logger.Error("追蹤時發生錯誤.");
                 throw;
             }
             finally
@@ -286,7 +287,7 @@
             }
             catch (Exception e)
             {
-                _pLog.Error("Problems occur: " + e.Message);
+                Logger.Error("Problems occur: " + e.Message);
                 Console.WriteLine(e.StackTrace);
             }
             finally
@@ -321,7 +322,7 @@
             catch (Exception e)
             {
                 // CCS.GlobalVariable.ErrorLog.setErrorLog("Error in JudgeCase(RealDamageEquipment) :" + e.getMessage());
-                _pLog.Error("Problems occur: " + e.Message);
+                Logger.Error("Problems occur: " + e.Message);
                 Console.WriteLine(e.StackTrace);
             }
             finally
diff --git a/CCSTrace/CCS/EventAI/TraceSubject.cs b/CCSTrace/CCS/EventAI/TraceSubject.cs
index 1f621b3..701dcf3 100644
--- a/CCSTrace/CCS/EventAI/TraceSubject.cs
+++ b/CCSTrace/CCS/EventAI/TraceSubject.cs
@@ -1,12 +1,15 @@
 using System;
 using System.Collections;
 using System.Data.OracleClient;
+using NLog;
 using TRACEROBJECTLib;
 
 namespace CCSTrace.CCS.EventAI
 {
     public class TraceSubject
     {
+        private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
+
         private string _mDbConnectionString;
         private static bool _isNewCase;
         private static ArrayList _mLinkList;								// store the switch of the new case path
@@ -14,18 +17,16 @@
         private static Hashtable _mTreeMap;                             // store the switch of the old case path
         private static int _sFsc;
         private static int _sUfid;
-        private readonly RecordLog _plogger;
         private readonly ArrayList _mTmp = new ArrayList();
         private NetworkContext _mPContext;
 
         private readonly OracleConnection _connectionTpc;
         private readonly OracleTransaction _transaction;
 
-        public TraceSubject(OracleConnection conn, OracleTransaction trx, string traceConnectionString, RecordLog log)
+        public TraceSubject(OracleConnection conn, OracleTransaction trx, string traceConnectionString)
         {
             _connectionTpc = conn;
             _transaction = trx;
-            _plogger = log;
             _mDbConnectionString = traceConnectionString;
 
             try
@@ -37,7 +38,7 @@
             }
             catch (Exception ex)
             {
-                _plogger.Error(ex.Message);
+                Logger.Error(ex, ex.Message);
                 throw ex;
             }
         }
@@ -72,9 +73,8 @@
             }
             catch (Exception e)
             {
-                _plogger.Error(e.Message);
-                Console.WriteLine(e.StackTrace);
-                throw e;
+                Logger.Error(e, e.Message);
+                throw;
             }
         }
 
@@ -100,8 +100,7 @@
             }
             catch (Exception e)
             {
-                _plogger.Error(e.Message);
-                Console.WriteLine(e.StackTrace);
+                Logger.Error(e, e.Message);
             }
             finally
             {
@@ -133,16 +132,13 @@
             }
             catch (Exception e)
             {
-                _plogger.Error(e.Message);
-                Console.WriteLine(e.StackTrace);
+                Logger.Error(e, e.Message);
             }
             finally
             {
-                if (command != null)
-                    command.Dispose();
+                command?.Dispose();
 
-                if (reader != null)
-                    reader.Close();
+                reader?.Close();
             }
             return false;
         }
@@ -193,7 +189,7 @@
                         }
 
                         Console.WriteLine(node.ClassID + "----->" + node.ObjectID);
-                        _plogger.Info(node.ClassID + "----->" + node.ObjectID);
+                        Logger.Info(node.ClassID + "----->" + node.ObjectID);
 
                         iti.MoveDescent((short)0);
                     }
@@ -220,10 +216,8 @@
                         }
                         i++;    //後面直接就FINISH,所以就不用判斷tracecount
 
-                        Console.WriteLine(node.ClassID + "----->" + node.ObjectID);
-                        _plogger.Info(node.ClassID + "----->" + node.ObjectID);
-                        Console.WriteLine("Trace Finish....");
-                        _plogger.Info("Trace Finish....");
+                        Logger.Info(node.ClassID + "----->" + node.ObjectID);
+                        Logger.Info("Trace Finish....");
                         break;
                     }
                     // 當追蹤到被切開的開關且該上一層設備只有該開關一個child)
@@ -245,10 +239,8 @@
                             }
                             i++;    //後面直接就FINISH,所以就不用判斷tracecount
 
-                            Console.WriteLine(node.ClassID + "----->" + node.ObjectID);
-                            _plogger.Info(node.ClassID + "----->" + node.ObjectID);
-                            Console.WriteLine("Trace Finish....");
-                            _plogger.Info("Trace Finish....");
+                            Logger.Info(node.ClassID + "----->" + node.ObjectID);
+                            Logger.Info("Trace Finish....");
                             break;
                         }
 
@@ -309,8 +301,7 @@
                                         _mTmp.Add(equip);
                                     }
 
-                                    Console.WriteLine(node.ClassID + "----->" + node.ObjectID);
-                                    _plogger.Info(node.ClassID + "----->" + node.ObjectID);
+                                    Logger.Info(node.ClassID + "----->" + node.ObjectID);
                                     i++;
 
                                     /*                                if (getTraceCount(node.ClassID, node.ObjectID) > 2)
@@ -344,8 +335,7 @@
                                             _mTmp.Add(equip);
                                         }
 
-                                        Console.WriteLine(node.ClassID + "----->" + node.ObjectID);
-                                        _plogger.Info(node.ClassID + "----->" + node.ObjectID);
+                                        Logger.Info(node.ClassID + "----->" + node.ObjectID);
                                         i++;
 
                                         /*                                    if (getTraceCount(node.ClassID, node.ObjectID) > 2)
@@ -370,13 +360,11 @@
                         }
                     } // for
                 } // while
-                Console.WriteLine("Tree Node Count = " + i);
-                _plogger.Info("Tree Node Count = " + i);
+                Logger.Info("Tree Node Count = " + i);
             }
             else
             {
-                Console.WriteLine("Tree is null");
-                _plogger.Info("Tree is null");
+                Logger.Info("Tree is null");
                 throw new Exception("無法追蹤到任何設備,可能是該用戶所在變壓器設備連結性有問題。");
             }
         }
@@ -388,11 +376,11 @@
             try
             {
                 ConfigTrace();
-                _plogger.Info("configTrace OK.");
+                Logger.Info("configTrace OK.");
             }
             catch (Exception e)
             {
-                _plogger.Error(e.Message);
+                Logger.Error(e.Message);
                 Console.WriteLine(e.StackTrace);
                 return tree;
             }
@@ -403,7 +391,7 @@
             }
             catch (Exception e)
             {
-                _plogger.Error(e.Message);
+                Logger.Error(e.Message);
                 Console.WriteLine(e.StackTrace);
             }
 
@@ -427,7 +415,7 @@
             }
             catch (Exception ex)
             {
-                _plogger.Error(ex.Message);
+                Logger.Error(ex, ex.Message);
             }
         }
 
@@ -459,13 +447,13 @@
 
             _mPContext.ResetContext();
 
-            _plogger.Info("Set ModeTrace OK.");
+            Logger.Info("Set ModeTrace OK.");
             ResultTreeBuilder trBuilder = _mPContext.CreateTreeBuilder();
             if (!trBuilder.constructResultTree(tContext, TRAVELTHREADMODE.CONMODE_SYNCHRONOUS)) { return null; }
-            _plogger.Info("ConstructResultTree OK.");
+            Logger.Info("ConstructResultTree OK.");
             ResultTree result = trBuilder.ResultTree;
 
-            _plogger.Info("getResultTree OK.");
+            Logger.Info("getResultTree OK.");
             return result;
         }
 
@@ -546,8 +534,7 @@
             }
             catch (Exception e)
             {
-                _plogger.Error(e.Message);
-                Console.WriteLine(e.StackTrace);
+                Logger.Error(e, e.Message);
                 return false;
             }
             finally
diff --git a/CCSTrace/CCS/FinishEvent.cs b/CCSTrace/CCS/FinishEvent.cs
index f93b037..f90b05e 100644
--- a/CCSTrace/CCS/FinishEvent.cs
+++ b/CCSTrace/CCS/FinishEvent.cs
@@ -2,15 +2,17 @@
 
 using System.Data.OracleClient;
 using CCSTrace.CCS.Domain;
+using NLog;
 
 namespace CCSTrace.CCS
 {
     public class FinishEvent
     {
+        private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
+
         private bool _upLevel;
         private int _originCaseStatus = 0;
         private Object.EventRecord _mEventRec = null;
-        private RecordLog _pLog;
         private OracleConnection _connectionTpc;
         private OracleTransaction _transaction;
 
@@ -18,21 +20,20 @@
         {
         }
 
-        public bool Finish(int mKind, Object.EventRecord mRecord, OracleConnection conn, OracleTransaction trx, RecordLog log)
+        public bool Finish(int mKind, Object.EventRecord mRecord, OracleConnection conn, OracleTransaction trx)
         {
             _mEventRec = mRecord;
-            _pLog = log;
             _connectionTpc = conn;
             _transaction = trx;
 
-            _pLog.Info("進行OMS資料更新程序...");
+            Logger.Info("進行OMS資料更新程序...");
             if (mRecord.ParentId== 0)
             { // Original Case
                 if (!(ProcessSingalCase(mRecord)))
                 {
                     return false;
                 }
-                _pLog.Info("更新eos.events成功!");
+                Logger.Info("更新eos.events成功!");
             }
             else
             { // Child Case
@@ -40,7 +41,7 @@
                 {
                     return false;
                 }
-                _pLog.Info("更新eos.events成功!");
+                Logger.Info("更新eos.events成功!");
             }
 
             // inert into eos.eventrecord && eos.eventrecord_ex
@@ -51,7 +52,7 @@
             {
                 if (command.ExecuteNonQuery() <= 0)
                 {
-                    _pLog.Error("儲存資料時發生錯誤: 無法更新eos.eventrecord");
+                    Logger.Error("儲存資料時發生錯誤: 無法更新eos.eventrecord");
                     command.Dispose();
                     return false;
                 }
@@ -59,7 +60,7 @@
                 command.CommandText = mRecord.LocateEquipment.GetSqlStmt();
                 if (command.ExecuteNonQuery() <= 0)
                 {
-                    _pLog.Error("儲存資料時發生錯誤: 無法更新eos.eventrecord_ex");
+                    Logger.Error("儲存資料時發生錯誤: 無法更新eos.eventrecord_ex");
                     command.Dispose();
                     return false;
                 }
@@ -72,81 +73,80 @@
                     {
                         if (!SetVisualCustomer(mRecord))
                         {
-                            _pLog.Error("新增影響用戶資料錯誤.");
+                            Logger.Error("新增影響用戶資料錯誤.");
                             return false;
                         }
-                        _pLog.Info("新增影響用戶成功!");
+                        Logger.Info("新增影響用戶成功!");
                     }
 
                     _upLevel = false; /* 判斷交辦案件是否升級為母案件 */
 
                     if (!(UpdateImportCase(mRecord)))
                     {
-                        _pLog.Error("處理案件等級變更時發生錯誤.");
+                        Logger.Error("處理案件等級變更時發生錯誤.");
                         return false;
                     }
-                    _pLog.Info("處理案件等級變更成功!");
+                    Logger.Info("處理案件等級變更成功!");
 
                     if (!(UpdateRecuseOrder(mRecord)))
                     {
-                        _pLog.Error("新增搶修順序資料時發生錯誤.");
+                        Logger.Error("新增搶修順序資料時發生錯誤.");
                         return false;
                     }
-                    _pLog.Info("新增搶修順序成功!");
+                    Logger.Info("新增搶修順序成功!");
 
                     if (mKind == GlobalVariable.CaseTypeChanged)
                     {
                         if (!DeleteOldCase(mRecord))
                         {
-                            _pLog.Error("案件轉換發生錯誤");
+                            Logger.Error("案件轉換發生錯誤");
                             return false;
                         }
-                        _pLog.Info("案件轉換成功!");
+                        Logger.Info("案件轉換成功!");
                     }
 
                     if (!SaveCustomerTel(mRecord))
                     {
-                        _pLog.Error("無法將用戶電話回存回資料庫.");
+                        Logger.Error("無法將用戶電話回存回資料庫.");
                         return false;
                     }
-                    _pLog.Info("將用戶電話回存回資料庫成功!");
+                    Logger.Info("將用戶電話回存回資料庫成功!");
                 }
                 else if (mKind == GlobalVariable.NoMeter)
                 {
-                    string sqlStmt;
-                    sqlStmt = "INSERT INTO EOS.RESCUE_ORDER SELECT " + mRecord.CaseId+ ",999,COUNT(*) + 1,'',"
-                            + mRecord.LocateEquipment.GetDsufid() + " FROM EOS.RESCUE_ORDER WHERE DSUFID = "
-                            + mRecord.LocateEquipment.GetDsufid();
+                    var sqlStmt = "INSERT INTO EOS.RESCUE_ORDER SELECT " + mRecord.CaseId+ ",999,COUNT(*) + 1,'',"
+                                     + mRecord.LocateEquipment.GetDsufid() + " FROM EOS.RESCUE_ORDER WHERE DSUFID = "
+                                     + mRecord.LocateEquipment.GetDsufid();
 
                     command1 = new OracleCommand(sqlStmt, _connectionTpc, _transaction);
                     if (command1.ExecuteNonQuery() <= 0)
                     {
-                        _pLog.Error("新增搶修順序資料時發生錯誤.");
+                        Logger.Error("新增搶修順序資料時發生錯誤.");
                         command1.Dispose();
                         return false;
                     }
                     command1.Dispose();
-                    _pLog.Info("新增搶修順序成功!");
+                    Logger.Info("新增搶修順序成功!");
                 }
 
                 if (mRecord.ParentId== 0)
                 {
                     if (!InsertIntoSri(mRecord))
                     {
-                        _pLog.Error("新增資料庫(OCSDB.SRI)錯誤.");
+                        Logger.Error("新增資料庫(OCSDB.SRI)錯誤.");
                         return false;
                     }
-                    _pLog.Info("新增資料庫(OCSDB.SRI)成功!");
+                    Logger.Info("新增資料庫(OCSDB.SRI)成功!");
                 }
             }
             catch (Exception e)
             {
+                Logger.Warn(e, e.Message);
                 command.Dispose();
 
-                if (command1 != null)
-                    command1.Dispose();
+                command1?.Dispose();
 
-                throw e;
+                throw;
             }
 
             /** COMMIT的動作須連外面CCS的資料都正確輸入完才作 */
@@ -155,10 +155,9 @@
 
         private bool ProcessSingalCase(Object.EventRecord mRecord)
         {
-            string sqlStmt;
-            bool result = false;
-            sqlStmt = "INSERT INTO EOS.EVENTS VALUES(" + mRecord.CaseId+ "," + CCSCaseState.WaitForDespatch + ",1,"
-                    + GlobalVariable.OriginalCase + ",0)";
+            var result = false;
+            var sqlStmt = "INSERT INTO EOS.EVENTS VALUES(" + mRecord.CaseId+ "," + CCSCaseState.WaitForDespatch + ",1,"
+                             + GlobalVariable.OriginalCase + ",0)";
 
             OracleCommand command = new OracleCommand(sqlStmt, _connectionTpc, _transaction);
 
@@ -167,12 +166,11 @@
                 if (command.ExecuteNonQuery() > 0)
                     result = true;
                 else
-                    _pLog.Error("儲存資料時發生錯誤:  無法insert eos.events");
+                    Logger.Error("儲存資料時發生錯誤:  無法insert eos.events");
             }
             catch (Exception e)
             {
-                _pLog.Error("儲存資料時發生錯誤:  無法insert eos.events. Error = " + e.Message);
-                Console.WriteLine(e.StackTrace);
+                Logger.Error(e, "儲存資料時發生錯誤:  無法insert eos.events. Error = " + e.Message);
             }
             finally
             {
@@ -183,10 +181,9 @@
 
         private bool ProcessMergeCase(Object.EventRecord mRecord)
         {
-            string sqlStmt;
             // insert eos.events
-            sqlStmt = "INSERT INTO EOS.EVENTS VALUES(" + mRecord.CaseId+ "," + CCSCaseState.WaitForDespatch + ",1,"
-                    + GlobalVariable.ChildCase + ",0)";
+            var sqlStmt = "INSERT INTO EOS.EVENTS VALUES(" + mRecord.CaseId+ "," + CCSCaseState.WaitForDespatch + ",1,"
+                             + GlobalVariable.ChildCase + ",0)";
 
             OracleCommand command = new OracleCommand(sqlStmt, _connectionTpc, _transaction);
 
@@ -194,7 +191,7 @@
             {
                 if (command.ExecuteNonQuery() <= 0)
                 {
-                    _pLog.Error("儲存資料時發生錯誤:  無法insert eos.events");
+                    Logger.Error("儲存資料時發生錯誤:  無法insert eos.events");
                     command.Dispose();
                     return false;
                 }
@@ -205,7 +202,7 @@
                 command.CommandText = sqlStmt;
                 if (command.ExecuteNonQuery() <= 0)
                 {
-                    _pLog.Error("儲存資料時發生錯誤:  無法insert eos.mergecase");
+                    Logger.Error("儲存資料時發生錯誤:  無法insert eos.mergecase");
                     command.Dispose();
                     return false;
                 }
@@ -217,7 +214,7 @@
                 command.CommandText = sqlStmt;
                 if (command.ExecuteNonQuery() <= 0)
                 {
-                    _pLog.Error("儲存資料時發生錯誤:  無法更改母案件資料");
+                    Logger.Error("儲存資料時發生錯誤:  無法更改母案件資料");
                     command.Dispose();
                     return false;
                 }
@@ -229,7 +226,7 @@
                 command.CommandText = sqlStmt;
                 if (command.ExecuteNonQuery() <= 0)
                 {
-                    _pLog.Error("儲存資料時發生錯誤:  無法update eos.eventrecord(FSC,UFID)");
+                    Logger.Error("儲存資料時發生錯誤:  無法update eos.eventrecord(FSC,UFID)");
                     command.Dispose();
                     return false;
                 }
@@ -237,8 +234,7 @@
             }
             catch (Exception e)
             {
-                _pLog.Error("儲存資料時發生錯誤: " + e.Message);
-                Console.WriteLine(e.StackTrace);
+                Logger.Error(e, "儲存資料時發生錯誤: " + e.Message);
                 command.Dispose();
                 return false;
             }
@@ -267,7 +263,7 @@
             }
             catch (Exception)
             {
-                _pLog.Error("無法判斷用戶種類.");
+                Logger.Error("無法判斷用戶種類.");
                 return false;
             }
             finally
@@ -321,7 +317,7 @@
             }
             catch (Exception)
             {
-                _pLog.Error("無法確認是否需重新修改原始母案件之影響用戶資料.");
+                Logger.Error("無法確認是否需重新修改原始母案件之影響用戶資料.");
                 return false;
             }
             finally
@@ -358,7 +354,7 @@
                         command1.CommandText = sqlStmt;
                         if (command1.ExecuteNonQuery() < 0)
                         {
-                            _pLog.Error("無法刪除原始案件的既有用戶資料.");
+                            Logger.Error("無法刪除原始案件的既有用戶資料.");
                             command1.Dispose();
                             return false;
                         }
@@ -372,7 +368,7 @@
                         command1.CommandText = sqlStmt;
                         if (command1.ExecuteNonQuery() <= 0)
                         {
-                            _pLog.Error("無法將原始案件的影響用戶數改為變壓器的全部用戶.");
+                            Logger.Error("無法將原始案件的影響用戶數改為變壓器的全部用戶.");
                             command1.Dispose();
                             return false;
                         }
@@ -381,9 +377,8 @@
                 }
                 catch (Exception e)
                 {
-                    _pLog.Error("無法更新原始案件影響用戶資料: " + e.Message);
-                    Console.WriteLine(e.StackTrace);
-                    command1.Dispose();
+                    Logger.Error(e, "無法更新原始案件影響用戶資料: " + e.Message);
+                    command1?.Dispose();
                     return false;
                 }
             }
@@ -397,7 +392,7 @@
             OracleCommand command2 = new OracleCommand(sqlStmt, _connectionTpc, _transaction);
             if (command2.ExecuteNonQuery() < 0)
             {
-                _pLog.Error("無法新增新受理案件的影響用戶資料.");
+                Logger.Error("無法新增新受理案件的影響用戶資料.");
                 command2.Dispose();
                 return false;
             }
@@ -407,8 +402,6 @@
 
         private bool UpdateImportCase(Object.EventRecord mRecord)
         {
-            string sqlStmt;
-
             /* 該案件不為交辦案件 */
             if (mRecord.ImportCase!= GlobalVariable.IsImportCase)
             {
@@ -422,7 +415,7 @@
             }
 
             /* 若母案件已為交辦案件,則不需再作任何更動 */
-            sqlStmt = "SELECT IMPORTCASE FROM EOS.EVENTRECORD WHERE CASEID = " + mRecord.ParentId;
+            var sqlStmt = "SELECT IMPORTCASE FROM EOS.EVENTRECORD WHERE CASEID = " + mRecord.ParentId;
             OracleCommand command = new OracleCommand(sqlStmt, _connectionTpc, _transaction);
             OracleDataReader reader = command.ExecuteReader();
 
@@ -434,9 +427,9 @@
                         return true;
                 }
             }
-            catch (Exception)
+            catch (Exception e)
             {
-                _pLog.Error("無法取得母案件之等級.");
+                Logger.Error(e, "無法取得母案件之等級." + e.Message);
                 return false;
             }
             finally
@@ -455,7 +448,7 @@
             OracleCommand command1 = new OracleCommand(sqlStmt, _connectionTpc, _transaction);
             if (command1.ExecuteNonQuery() <= 0)
             {
-                _pLog.Error("無法將交辦案件改為母案件.");
+                Logger.Error("無法將交辦案件改為母案件.");
                 command1.Dispose();
                 return false;
             }
@@ -466,7 +459,7 @@
             command1.CommandText = sqlStmt;
             if (command1.ExecuteNonQuery() <= 0)
             {
-                _pLog.Error("無法將母案件改為子案件.");
+                Logger.Error("無法將母案件改為子案件.");
                 command1.Dispose();
                 return false;
             }
@@ -477,7 +470,7 @@
             command1.CommandText = sqlStmt;
             if (command1.ExecuteNonQuery() <= 0)
             {
-                _pLog.Error("無法將原先該母案件下的子案件都改掛在交辦案件下.");
+                Logger.Error("無法將原先該母案件下的子案件都改掛在交辦案件下.");
                 command1.Dispose();
                 return false;
             }
@@ -488,7 +481,7 @@
             command1.CommandText = sqlStmt;
             if (command1.ExecuteNonQuery() <= 0)
             {
-                _pLog.Error("無法將已INSERT入EOS.MERGECASE內的交辦案件資料改為原先母案件的資料(CaseID,AcceptNum).");
+                Logger.Error("無法將已INSERT入EOS.MERGECASE內的交辦案件資料改為原先母案件的資料(CaseID,AcceptNum).");
                 command1.Dispose();
                 return false;
             }
@@ -499,9 +492,7 @@
 
         private bool UpdateOtherTable(int oldCaseId, int newCaseId, string newAcceptNum)
         {
-            string sqlStmt;
-
-            sqlStmt = "SELECT CASESTATUS FROM EOS.EVENTS WHERE CASEID = " + oldCaseId;
+            var sqlStmt = "SELECT CASESTATUS FROM EOS.EVENTS WHERE CASEID = " + oldCaseId;
             OracleCommand command = new OracleCommand(sqlStmt, _connectionTpc, _transaction);
             OracleDataReader reader = command.ExecuteReader();
 
@@ -516,7 +507,7 @@
                 switch (_originCaseStatus)
                 {
                     case 0:
-                        _pLog.Error("找不到原始母案件之案件狀態.");
+                        Logger.Error("找不到原始母案件之案件狀態.");
                         command.Dispose();
                         return false;
 
@@ -529,7 +520,7 @@
                         command.CommandText = sqlStmt;
                         if (command.ExecuteNonQuery() < 0)
                         {
-                            _pLog.Error("無法更新EOS.EVENTDESPATCH.");
+                            Logger.Error("無法更新EOS.EVENTDESPATCH.");
                             command.Dispose();
                             return false;
                         }
@@ -538,7 +529,7 @@
                         command.CommandText = sqlStmt;
                         if (command.ExecuteNonQuery() < 0)
                         {
-                            _pLog.Error("無法更新EOS.EVENTS.");
+                            Logger.Error("無法更新EOS.EVENTS.");
                             command.Dispose();
                             return false;
                         }
@@ -552,7 +543,7 @@
                 command.CommandText = sqlStmt;
                 if (command.ExecuteNonQuery() <= 0)
                 {
-                    _pLog.Error("無法更新EOS.Events的CaseStatus.");
+                    Logger.Error("無法更新EOS.Events的CaseStatus.");
                     command.Dispose();
                     return false;
                 }
@@ -563,7 +554,7 @@
                 command.CommandText = sqlStmt;
                 if (command.ExecuteNonQuery() < 0)
                 {
-                    _pLog.Error("無法更新OCSDB.SRI.");
+                    Logger.Error("無法更新OCSDB.SRI.");
                     command.Dispose();
                     return false;
                 }
@@ -588,7 +579,7 @@
                     command.CommandText = sqlStmt;
                     if (command.ExecuteNonQuery() < 0)
                     {
-                        _pLog.Error("無法更新EOS.EVENTFACILITY.");
+                        Logger.Error("無法更新EOS.EVENTFACILITY.");
                         command.Dispose();
                         return false;
                     }
@@ -598,7 +589,7 @@
                     command.CommandText = sqlStmt;
                     if (command.ExecuteNonQuery() < 0)
                     {
-                        _pLog.Error("無法更新EOS.CRTAPOLOGY.");
+                        Logger.Error("無法更新EOS.CRTAPOLOGY.");
                         command.Dispose();
                         return false;
                     }
@@ -608,7 +599,7 @@
                     command.CommandText = sqlStmt;
                     if (command.ExecuteNonQuery() < 0)
                     {
-                        _pLog.Error("無法更新EOS.EVENTAFFECT.");
+                        Logger.Error("無法更新EOS.EVENTAFFECT.");
                         command.Dispose();
                         return false;
                     }
@@ -616,7 +607,7 @@
                     //                SqlStmt = "UPDATE EOS.VOICE SET CASEID = " + NewCaseID + " WHERE CASEID = " + OldCaseID;
 
                     //                if (CCS.GlobalVariable.Conn.UpdateDB(SqlStmt) < 0) {
-                    //                    _PLog.error("無法更新EOS.VOICE.");
+                    //                    Logger.error("無法更新EOS.VOICE.");
                     //                    return false;
                     //                }
 
@@ -626,7 +617,7 @@
                     command.CommandText = sqlStmt;
                     if (command.ExecuteNonQuery() < 0)
                     {
-                        _pLog.Error("無法更新OCSDB.LOCKFEATURE");
+                        Logger.Error("無法更新OCSDB.LOCKFEATURE");
                         command.Dispose();
                         return false;
                     }
@@ -635,8 +626,7 @@
             }
             catch (Exception e)
             {
-                _pLog.Error(e.Message);
-                Console.WriteLine(e.StackTrace);
+                Logger.Error(e, e.Message);
                 reader.Close();
                 command.Dispose();
                 return false;
@@ -646,7 +636,6 @@
 
         private bool UpdateRecuseOrder(Object.EventRecord mRecord)
         {
-            string sqlStmt;
             int rank = 999;
             int priority = 1;
             OracleCommand command = null;
@@ -665,6 +654,7 @@
 
             try
             {
+                string sqlStmt;
                 if (_upLevel)
                 {
                     /* 將原先母案件的編號改為新的母案件編號 */
@@ -673,7 +663,7 @@
                     command = new OracleCommand(sqlStmt, _connectionTpc, _transaction);
                     if (command.ExecuteNonQuery() <= 0)
                     {
-                        _pLog.Error("無法更新EOS.RESCUE_ORDER: 無法將原先母案件的編號改為新的母案件編號.");
+                        Logger.Error("無法更新EOS.RESCUE_ORDER: 無法將原先母案件的編號改為新的母案件編號.");
                         command.Dispose();
                         return false;
                     }
@@ -736,7 +726,7 @@
                     command.CommandText = sqlStmt;
                     if (command.ExecuteNonQuery() < 0)
                     {
-                        _pLog.Error("無法更新EOS.RESCUE_ORDER舊的搶修號碼.");
+                        Logger.Error("無法更新EOS.RESCUE_ORDER舊的搶修號碼.");
                         command.Dispose();
                         return false;
                     }
@@ -748,7 +738,7 @@
                     command.CommandText = sqlStmt;
                     if (command.ExecuteNonQuery() <= 0)
                     {
-                        _pLog.Error("無法新增EOS.RESCUE_ORDER的資料");
+                        Logger.Error("無法新增EOS.RESCUE_ORDER的資料");
                         command.Dispose();
                         return false;
                     }
@@ -758,8 +748,7 @@
             }
             catch (Exception e)
             {
-                _pLog.Error("Problems occue during updating eos.rescue_order: " + e.Message);
-                Console.WriteLine(e.StackTrace);
+                Logger.Error(e, "Problems occue during updating eos.rescue_order: " + e.Message);
 
                 if (command != null)
                     command.Dispose();
@@ -800,7 +789,7 @@
                 {
                     reader.Close();
                     command.Dispose();
-                    _pLog.Error("無法找到原先舊的案件.");
+                    Logger.Error("無法找到原先舊的案件.");
                     return false;
                 }
 
@@ -809,7 +798,7 @@
                 command.CommandText = sqlStmt;
                 if (command.ExecuteNonQuery() <= 0)
                 {
-                    _pLog.Error("刪除原先舊的案件的EOS.EVENTS發生錯誤.");
+                    Logger.Error("刪除原先舊的案件的EOS.EVENTS發生錯誤.");
                     command.Dispose();
                     return false;
                 }
@@ -819,7 +808,7 @@
                 command.CommandText = sqlStmt;
                 if (command.ExecuteNonQuery() <= 0)
                 {
-                    _pLog.Error("刪除原先舊的案件的EOS.EVENTRECORD發生錯誤.");
+                    Logger.Error("刪除原先舊的案件的EOS.EVENTRECORD發生錯誤.");
                     command.Dispose();
                     return false;
                 }
@@ -829,7 +818,7 @@
                 command.CommandText = sqlStmt;
                 if (command.ExecuteNonQuery() <= 0)
                 {
-                    _pLog.Error("刪除原先舊的案件的EOS.EVENTRECORD_EX發生錯誤.");
+                    Logger.Error("刪除原先舊的案件的EOS.EVENTRECORD_EX發生錯誤.");
                     command.Dispose();
                     return false;
                 }
@@ -839,7 +828,7 @@
                 command.CommandText = sqlStmt;
                 if (command.ExecuteNonQuery() < 0)
                 {
-                    _pLog.Error("刪除原先舊的案件的EOS.TMPAFFECTCUSTMS發生錯誤.");
+                    Logger.Error("刪除原先舊的案件的EOS.TMPAFFECTCUSTMS發生錯誤.");
                     command.Dispose();
                     return false;
                 }
@@ -856,7 +845,7 @@
                         switch (Convert.ToInt32(reader["COUNT"].ToString()))
                         {
                             case 0:
-                                _pLog.Error("無法找到原先母案件下掛的子案件.");
+                                Logger.Error("無法找到原先母案件下掛的子案件.");
                                 reader.Close();
                                 command.Dispose();
                                 return false;
@@ -868,7 +857,7 @@
                                 command.CommandText = sqlStmt;
                                 if (command.ExecuteNonQuery() <= 0)
                                 {
-                                    _pLog.Error("無法更新原先子案件(要提升為母案件)的資料.");
+                                    Logger.Error("無法更新原先子案件(要提升為母案件)的資料.");
                                     reader.Close();
                                     command.Dispose();
                                     return false;
@@ -880,7 +869,7 @@
                                 command.CommandText = sqlStmt;
                                 if (command.ExecuteNonQuery() < 0)
                                 {
-                                    _pLog.Error("無法刪除原先子案件(要提升為母案件)EOS.TMPAFFECTYCUSTMS的資料.");
+                                    Logger.Error("無法刪除原先子案件(要提升為母案件)EOS.TMPAFFECTYCUSTMS的資料.");
                                     reader.Close();
                                     command.Dispose();
                                     return false;
@@ -894,7 +883,7 @@
                                 command.CommandText = sqlStmt;
                                 if (command.ExecuteNonQuery() < 0)
                                 {
-                                    _pLog.Error("無法更新EOS.EVENTS的資料.");
+                                    Logger.Error("無法更新EOS.EVENTS的資料.");
                                     reader.Close();
                                     command.Dispose();
                                     return false;
@@ -907,7 +896,7 @@
                     {
                         reader.Close();
                         command.Dispose();
-                        _pLog.Error("無法找到原先母案件下掛的子案件.");
+                        Logger.Error("無法找到原先母案件下掛的子案件.");
                         return false;
                     }
                 }
@@ -917,7 +906,7 @@
                 command.CommandText = sqlStmt;
                 if (command.ExecuteNonQuery() <= 0)
                 {
-                    _pLog.Error("刪除EOS.MERGECASE發生錯誤");
+                    Logger.Error("刪除EOS.MERGECASE發生錯誤");
                     command.Dispose();
                     return false;
                 }
@@ -926,8 +915,7 @@
             }
             catch (Exception e)
             {
-                _pLog.Error(e.Message);
-                Console.WriteLine(e.StackTrace);
+                Logger.Error(e, e.Message);
 
                 if (command != null)
                     command.Dispose();
@@ -939,12 +927,11 @@
 
         private bool InsertIntoSri(Object.EventRecord mRecord)
         {
-            string sqlStmt;
             int count = 0;
             OracleCommand command = null;
             OracleDataReader reader = null;
 
-            sqlStmt = "SELECT COUNT(*) as COUNT FROM OCSDB.SRI WHERE SCENENAME = '" + mRecord.AcceptNum+ "'";
+            var sqlStmt = "SELECT COUNT(*) as COUNT FROM OCSDB.SRI WHERE SCENENAME = '" + mRecord.AcceptNum+ "'";
 
             try
             {
@@ -956,14 +943,12 @@
             }
             catch (Exception e)
             {
-                _pLog.Error("Problems occur when checking SCENE Data: " + e.Message);
-                Console.WriteLine(e.StackTrace);
+                Logger.Error(e, "Problems occur when checking SCENE Data: " + e.Message);
                 return false;
             }
             finally
             {
-                if (reader != null)
-                    reader.Close();
+                reader?.Close();
             }
 
             if (count > 0)
@@ -983,8 +968,7 @@
             }
             catch (Exception e)
             {
-                Console.WriteLine(e.Message);
-                Console.WriteLine(e.StackTrace);
+                Logger.Warn(e, e.Message);
             }
             finally
             {
@@ -1012,7 +996,7 @@
             // 電話資料過長
             if (mRecord.Tel.Trim().Length > 24)
             {
-                _pLog.Warn("電話過長號碼,無法回存資料庫.");
+                Logger.Warn("電話過長號碼,無法回存資料庫.");
                 return true;
             }
 
@@ -1023,12 +1007,11 @@
             try
             {
                 if (command.ExecuteNonQuery() <= 0)
-                    _pLog.Warn("無法將用戶電話回存回資料庫.");
+                    Logger.Warn("無法將用戶電話回存回資料庫.");
             }
             catch (Exception e)
             {
-                Console.WriteLine(e.Message);
-                Console.WriteLine(e.StackTrace);
+                Logger.Warn(e, e.Message);
             }
             finally
             {
diff --git a/CCSTrace/CCS/Function/InitialEventData.cs b/CCSTrace/CCS/Function/InitialEventData.cs
index 5d15df4..e2c0e96 100644
--- a/CCSTrace/CCS/Function/InitialEventData.cs
+++ b/CCSTrace/CCS/Function/InitialEventData.cs
@@ -1,28 +1,29 @@
 using System;
 using System.Data.OracleClient;
 using System.Runtime.CompilerServices;
+using NLog;
 
 namespace CCSTrace.CCS.Function
 {
     public class InitialEventData
     {
+        private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
+
         private string _mAcceptNum = "";
         private int _mCaseId = 0;
         private int _mYear = 0;
         private bool _mChangeYear = false;
         private string _mNowYear = string.Empty;
         private readonly string _mAcceptTime = "";
-        private readonly RecordLog _pLog;
         private readonly OracleConnection _connectionTpc;
 
         //New CaseID and New AcceptNum must be seen by others,so it need not controled by transaction
         [MethodImpl(MethodImplOptions.Synchronized)]
-        public InitialEventData(OracleConnection conn, RecordLog log)
+        public InitialEventData(OracleConnection conn)
         {
             _connectionTpc = conn;
-            _pLog = log;
 
-            string sqlStmt = "SELECT ACCEPTNUM,CASEID,YEAR,TO_CHAR(SYSDATE,'YYYY/MM/DD') as ACCEPTTIME FROM EOS.EVENTNUM";
+            var sqlStmt = "SELECT ACCEPTNUM,CASEID,YEAR,TO_CHAR(SYSDATE,'YYYY/MM/DD') as ACCEPTTIME FROM EOS.EVENTNUM";
 
             OracleCommand command = new OracleCommand(sqlStmt, _connectionTpc);
             OracleDataReader reader = command.ExecuteReader();
@@ -38,13 +39,13 @@
                 }
                 else
                 {
-                    _pLog.Error("起始號碼資料遺失!");
+                    Logger.Error("起始號碼資料遺失!");
                     return;
                 }
             }
             catch (Exception e)
             {
-                _pLog.Error("Problems occur when Initializing EventData: " + e.Message);
+                Logger.Error(e, "Problems occur when Initializing EventData: " + e.Message);
                 Console.WriteLine(e.StackTrace);
                 return;
             }
@@ -94,9 +95,8 @@
             }
             catch (Exception e)
             {
-                _pLog.Error("Problems occur during EventNumCreating: " + e.Message);
-                Console.WriteLine(e.StackTrace);
-                throw e;
+                Logger.Error(e, "Problems occur during EventNumCreating: " + e.Message);
+                throw;
             }
             finally
             {
@@ -137,7 +137,7 @@
 
         private void RegetNumber()
         {
-            string sqlStmt = "SELECT ACCEPTNUM,CASEID,YEAR FROM EOS.EVENTNUM";
+            var sqlStmt = "SELECT ACCEPTNUM,CASEID,YEAR FROM EOS.EVENTNUM";
             OracleCommand command = new OracleCommand(sqlStmt, _connectionTpc);
             OracleDataReader reader = command.ExecuteReader();
 
diff --git a/CCSTrace/CCS/Function/Leach.cs b/CCSTrace/CCS/Function/Leach.cs
index e5aa02d..21312e1 100644
--- a/CCSTrace/CCS/Function/Leach.cs
+++ b/CCSTrace/CCS/Function/Leach.cs
@@ -2,23 +2,24 @@
 
 using System.Data.OracleClient;
 using CCSTrace.CCS.Domain;
+using NLog;
 
 namespace CCSTrace.CCS.Function
 {
     public class Leach
     {
+        private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
+
         private readonly MergeCase _mergeCase = new MergeCase();
-        private readonly RecordLog _pLog;
         private readonly OracleConnection _connectionTpc;
         private readonly OracleTransaction _transaction;
         private readonly string _traceConnectionString;
 
-        public Leach(OracleConnection conn, OracleTransaction trx, string traceConnection, RecordLog log)
+        public Leach(OracleConnection conn, OracleTransaction trx, string traceConnection)
         {
             _connectionTpc = conn;
             _transaction = trx;
             _traceConnectionString = traceConnection;
-            _pLog = log;
         }
 
         public int LeachCase(Object.EventRecord mNewRec)
@@ -58,7 +59,7 @@
             int importCase = -1;
             int tmpCaseId = 0;
             int caseType = -1;
-            _pLog.Info("利用電號或地址檢查是否有已成立之案件.");
+            Logger.Info("利用電號或地址檢查是否有已成立之案件.");
             // 檢查資料庫中此電號或地址是否已成立案件
 
             if (mNewRec.Meter.Trim().Length != 0)
@@ -83,13 +84,12 @@
                     tmpCaseId = Convert.ToInt32(reader["CASEID"].ToString());
                     caseType = Convert.ToInt32(reader["CASETYPE"].ToString());
                     mNewRec.TmpCaseId = tmpCaseId;
-                    _pLog.Info("案件已成立:" + reader["ACCEPTNUM"].ToString() + " " + tmpCaseId + " " + caseType);
+                    Logger.Info("案件已成立:" + reader["ACCEPTNUM"].ToString() + " " + tmpCaseId + " " + caseType);
                 }
             }
             catch (Exception e)
             {
-                _pLog.Error(e.Message);
-                Console.WriteLine(e.StackTrace);
+                Logger.Error(e.Message);
                 return GlobalVariable.FailureByDb;
             }
             finally
@@ -118,10 +118,10 @@
                     break;
 
                 default:
-                    _pLog.Error("無法辨別案件種類.");
+                    Logger.Error("無法辨別案件種類.");
                     return GlobalVariable.FailureByDb;
             }
-            _pLog.Info("檢查該案件有無切開關紀錄.");
+            Logger.Info("檢查該案件有無切開關紀錄.");
 
             try
             {
@@ -133,7 +133,7 @@
                     // 有開關尚未恢復
                     if (reader["CLOSETIME"] == null)
                     {
-                        _pLog.Info("有切開關且尚未恢復.");
+                        Logger.Info("有切開關且尚未恢復.");
                         if ((mNewRec.ImportCase== importCase) || (importCase == GlobalVariable.IsImportCase))
                         {
                             mResult = AddCount(tmpCaseId);
@@ -146,7 +146,7 @@
                     else
                     {
                         // 開關都已恢復(同用戶須重新受理)
-                        _pLog.Info("有切開關且已經恢復.");
+                        Logger.Info("有切開關且已經恢復.");
                         int caseId;
 
                         // 找出案件編號需以母案件編號或該案件編號去找casestatus
@@ -172,7 +172,7 @@
                 else
                 {
                     // 未切過開關
-                    _pLog.Info("無切開關紀錄.");
+                    Logger.Info("無切開關紀錄.");
                     if ((mNewRec.ImportCase== importCase) || (importCase == GlobalVariable.IsImportCase))
                     {
                         mResult = AddCount(tmpCaseId);
@@ -204,8 +204,7 @@
             }
             catch (Exception e)
             {
-                _pLog.Error(e.Message);
-                Console.WriteLine(e.StackTrace);
+                Logger.Error(e, e.Message);
                 return GlobalVariable.FailureByDb;
             }
             finally
@@ -218,18 +217,16 @@
 
         private int AddCount(int mCaseId)
         {
-            string sqlStmt = "UPDATE EOS.EVENTS SET COUNT = COUNT + 1 WHERE CASEID = " + mCaseId;
+            var sqlStmt = "UPDATE EOS.EVENTS SET COUNT = COUNT + 1 WHERE CASEID = " + mCaseId;
             OracleCommand command = new OracleCommand(sqlStmt, _connectionTpc, _transaction);
 
             try
             {
-                if (command.ExecuteNonQuery() > 0)
-                    return GlobalVariable.SameCustomer;
-                else
-                    return GlobalVariable.FailureByDb;
+                return command.ExecuteNonQuery() > 0 ? GlobalVariable.SameCustomer : GlobalVariable.FailureByDb;
             }
-            catch (Exception)
+            catch (Exception e)
             {
+                Logger.Warn(e, e.Message);
                 return GlobalVariable.FailureByDb;
             }
             finally
@@ -240,10 +237,9 @@
 
         private int GetCastStatus(int caseId)
         {
-            string sqlStmt;
             int status = 0;
 
-            sqlStmt = "SELECT CASESTATUS FROM CCS.EVENTQUERY WHERE CCSID IN (SELECT CCSID FROM CCS.NUM_CONTRAST " + "WHERE CASEID = " + caseId + ")";
+            var sqlStmt = "SELECT CASESTATUS FROM CCS.EVENTQUERY WHERE CCSID IN (SELECT CCSID FROM CCS.NUM_CONTRAST " + "WHERE CASEID = " + caseId + ")";
             OracleCommand command = new OracleCommand(sqlStmt, _connectionTpc, _transaction);
             OracleDataReader reader = null;
 
@@ -256,8 +252,7 @@
             }
             catch (Exception e)
             {
-                Console.WriteLine(e.Message);
-                Console.WriteLine(e.StackTrace);
+                Logger.Error(e, e.Message);
             }
             finally
             {
@@ -285,30 +280,32 @@
                 {
                     mNewRec.LocateEquipment.SetFsc(GlobalVariable.Breaker);
                     mNewRec.LocateEquipment.SetUfid(mNewRec.Ufid);
-                    _pLog.Info("饋線全停:" + mNewRec.Fsc+ ", " + mNewRec.Ufid);
-                    _mergeCase.Merge(mNewRec, _connectionTpc, _transaction, _traceConnectionString, _pLog);
+                    Logger.Info("饋線全停:" + mNewRec.Fsc+ ", " + mNewRec.Ufid);
+                    _mergeCase.Merge(mNewRec, _connectionTpc, _transaction, _traceConnectionString);
                     return GlobalVariable.Success;
                 }
             }
-            catch (EventAI.TraceLoopException)
+            catch (EventAI.TraceLoopException e)
             {
+                Logger.Warn(e, e.Message);
                 return GlobalVariable.TraceCounts3;
             }
-            catch (TraceException)
+            catch (TraceException e)
             {
+                Logger.Warn(e, e.Message);
                 return GlobalVariable.TraceFailure;
             }
             catch (Exception ex)
             {
-                _pLog.Error(ex.Message);
+                Logger.Error(ex, ex.Message);
                 return GlobalVariable.FailureByDb;
             }
 
             try
             {
-                _pLog.Info("定位損壞設備!");
+                Logger.Info("定位損壞設備!");
                 int result = GetEquipment(mNewRec);
-                _pLog.Info("FSC:" + mNewRec.Fsc+ ", Ufid:" + mNewRec.Ufid+ ", Tpclid:" + mNewRec.Tpclid+ ", FeederID:" + mNewRec.FdrId);
+                Logger.Info("FSC:" + mNewRec.Fsc+ ", Ufid:" + mNewRec.Ufid+ ", Tpclid:" + mNewRec.Tpclid+ ", FeederID:" + mNewRec.FdrId);
 
                 switch (result)
                 { // get fsc,ufid,fdrid of sxfmr by meter
@@ -324,12 +321,12 @@
 
                             if (mNewRec.Brief.Length != 0 && mNewRec.Brief.Substring(0, 1).Equals("A"))
                             { // A類事故原因,做追蹤合併
-                                _pLog.Info("<A類案件>");
-                                _mergeCase.Merge(mNewRec, _connectionTpc, _transaction, _traceConnectionString, _pLog);
+                                Logger.Info("<A類案件>");
+                                _mergeCase.Merge(mNewRec, _connectionTpc, _transaction, _traceConnectionString);
                             }
                             else
                             {
-                                _pLog.Info("<非A類案件>");
+                                Logger.Info("<非A類案件>");
                             }
 
                             if (changeCaseType)
@@ -352,17 +349,19 @@
                         break;
                 }
             }
-            catch (EventAI.TraceLoopException)
+            catch (EventAI.TraceLoopException e)
             {
+                Logger.Warn(e, e.Message);
                 return GlobalVariable.TraceCounts3;
             }
-            catch (TraceException)
+            catch (TraceException e)
             {
+                Logger.Warn(e, e.Message);
                 mResult = GlobalVariable.TraceFailure;
             }
             catch (Exception ex1)
             {
-                _pLog.Error(ex1.Message);
+                Logger.Error(ex1, ex1.Message);
                 mResult = GlobalVariable.FailureByDb;
             }
             return mResult;
@@ -408,7 +407,7 @@
             }
             catch (Exception e)
             {
-                _pLog.Error(e.Message);
+                Logger.Error(e.Message);
                 Console.WriteLine(e.StackTrace);
                 return GlobalVariable.FailureByDb;
             }
@@ -452,7 +451,7 @@
             }
             catch (Exception ex)
             {
-                _pLog.Error(ex.Message);
+                Logger.Error(ex, ex.Message);
             }
             finally
             {
@@ -494,7 +493,7 @@
             }
             catch (Exception ex)
             {
-                _pLog.Error(ex.Message);
+                Logger.Error(ex, ex.Message);
                 return GlobalVariable.FailureByDb;
             }
             finally
@@ -532,8 +531,7 @@
             }
             catch (Exception e)
             {
-                _pLog.Error(e.Message);
-                Console.WriteLine(e.StackTrace);
+                Logger.Error(e, e.Message);
             }
             finally
             {
diff --git a/CCSTrace/CCS/Function/MailService.cs b/CCSTrace/CCS/Function/MailService.cs
index 4b78991..719d8d3 100644
--- a/CCSTrace/CCS/Function/MailService.cs
+++ b/CCSTrace/CCS/Function/MailService.cs
@@ -2,11 +2,14 @@
 using System.Data.OracleClient;
 using System.Net;
 using System.Net.Mail;
+using NLog;
 
 namespace CCSTrace.CCS.Function
 {
     public class MailService
     {
+        private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
+
         private SmtpClient _smtpClient;
         private string _smtpIp;
         private int _smtpPort;
diff --git a/CCSTrace/CCS/Function/MergeCase.cs b/CCSTrace/CCS/Function/MergeCase.cs
index 353cb7e..b501ce9 100644
--- a/CCSTrace/CCS/Function/MergeCase.cs
+++ b/CCSTrace/CCS/Function/MergeCase.cs
@@ -2,11 +2,14 @@
 
 using System.Data.OracleClient;
 using CCSTrace.CCS.Object;
+using NLog;
 
 namespace CCSTrace.CCS.Function
 {
     public class MergeCase
     {
+        private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
+
         private EventRecord _lEventrecord;
         private EventAI.JudgeCase _mJudgeCase;
 
@@ -14,12 +17,12 @@
         {
         }
 
-        public void Merge(EventRecord mEventrecord, OracleConnection conn, OracleTransaction trx, string traceConnection, RecordLog log)
+        public void Merge(EventRecord mEventrecord, OracleConnection conn, OracleTransaction trx, string traceConnection)
         {
             try
             {
                 _mJudgeCase = new EventAI.JudgeCase(mEventrecord.FdrId, mEventrecord.Fsc, mEventrecord.Ufid,
-                                                        mEventrecord.CaseId, mEventrecord.AcceptDate, conn, trx, traceConnection, log);
+                                                        mEventrecord.CaseId, mEventrecord.AcceptDate, conn, trx, traceConnection);
                 _lEventrecord = mEventrecord;
                 _mJudgeCase.AiBegin();
                 _lEventrecord.ParentId = _mJudgeCase.GetParentCaseId();
@@ -28,13 +31,13 @@
             }
             catch (EventAI.TraceLoopException tle)
             {
-                log.Error(tle.Message);
-                throw tle;
+                Logger.Error(tle, tle.Message);
+                throw;
             }
             catch (Exception e)
             {
-                log.Error(e.Message);
-                throw e;
+                Logger.Error(e.Message);
+                throw;
             }
         }
 
diff --git a/CCSTrace/CCS/Object/Addr_Contrast.cs b/CCSTrace/CCS/Object/Addr_Contrast.cs
index e011861..9d18779 100644
--- a/CCSTrace/CCS/Object/Addr_Contrast.cs
+++ b/CCSTrace/CCS/Object/Addr_Contrast.cs
@@ -2,23 +2,22 @@
 
 using System.Collections;
 using System.Data.OracleClient;
+using NLog;
 
 namespace CCSTrace.CCS.Object
 {
     public class AddrContrast
     {
+        private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
+
         public static Hashtable MTotalData = null;
         public static string DefaultDept = "市區巡修課";
         private OracleConnection _connectionTpc;
-        private RecordLog _pLog;
 
-        public AddrContrast(OracleConnection conn, OracleTransaction trx, RecordLog log)
+        public AddrContrast(OracleConnection conn, OracleTransaction trx)
         {
             _connectionTpc = conn;
-            _pLog = log;
 
-            string sqlStmt;
-            string city;
             ArrayList mData = new ArrayList();
             string tmp = "";
 
@@ -26,7 +25,7 @@
                 return;
 
             MTotalData = new Hashtable();
-            sqlStmt = "SELECT DEPTID,CITY,TOWN,ROAD FROM CCS.ADDR_CONTRAST ORDER BY CITY,TOWN,ROAD";
+            var sqlStmt = "SELECT DEPTID,CITY,TOWN,ROAD FROM CCS.ADDR_CONTRAST ORDER BY CITY,TOWN,ROAD";
 
             OracleCommand command = null;
             OracleDataReader reader = null;
@@ -38,7 +37,7 @@
                 while (reader.Read())
                 {
                     ArrayList mRecord = new ArrayList();
-                    city = reader["CITY"].ToString();
+                    var city = reader["CITY"].ToString();
                     mRecord.Add(city);
                     mRecord.Add(reader["TOWN"].ToString());
                     mRecord.Add(reader["ROAD"].ToString());
@@ -86,9 +85,10 @@
                         return deptId;
                 }
             }
-            catch (Exception)
+            catch (Exception e)
             {
-                _pLog.Warn("無法取得所屬巡修部門代號,預設案件所屬巡修部門為市區巡修課!");
+                Logger.Warn(e , e.Message);
+                Logger.Warn("無法取得所屬巡修部門代號,預設案件所屬巡修部門為市區巡修課!");
             }
             // 當找不到部門別時,Default 設定為市巡
             dept = GlobalVariable.EosCodelist.GetKeyId(GlobalVariable.Dept, DefaultDept);
diff --git a/CCSTrace/CCS/Object/AlarmData.cs b/CCSTrace/CCS/Object/AlarmData.cs
index 24baee3..fa1a977 100644
--- a/CCSTrace/CCS/Object/AlarmData.cs
+++ b/CCSTrace/CCS/Object/AlarmData.cs
@@ -4,25 +4,23 @@
 using System.Data.OracleClient;
 using System.Net;
 using System.Net.Sockets;
+using NLog;
 
 namespace CCSTrace.CCS.Object
 {
     public class AlarmData
     {
+        private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
         private Hashtable _mTotalData = new Hashtable();
-        private RecordLog _pLog;
         private OracleConnection _connectionTpc;
         private OracleTransaction _transaction;
 
-        public AlarmData(OracleConnection conn, OracleTransaction trx, RecordLog log)
+        public AlarmData(OracleConnection conn, OracleTransaction trx)
         {
             _connectionTpc = conn;
             _transaction = trx;
-            _pLog = log;
 
-            string sqlStmt;
-
-            sqlStmt = "SELECT DEPTID,IP1,IP2,IP_PATROL FROM CCS.ALARM_IP";
+            var sqlStmt = "SELECT DEPTID,IP1,IP2,IP_PATROL FROM CCS.ALARM_IP";
             OracleCommand command = new OracleCommand(sqlStmt, _connectionTpc, _transaction);
             OracleDataReader reader = command.ExecuteReader();
 
@@ -41,7 +39,7 @@
             }
             catch (Exception e)
             {
-                _pLog.Error("Problems occur when fetch alarm data: (" + e.Message + ")");
+                Logger.Error(e, "Problems occur when fetch alarm data: (" + e.Message + ")");
                 Console.WriteLine(e.StackTrace);
             }
             finally
@@ -94,7 +92,7 @@
 
         public bool Alarm(string acceptNum, int dept)
         {
-            _pLog.Info("開始Alarm...");
+            Logger.Info("開始Alarm...");
             Socket mClient;
             ArrayList ipAddressSet = GetIpAddress(GetSscCode(dept, Convert.ToInt32(DateTime.Now.DayOfWeek)));
             string ip1;
@@ -104,14 +102,14 @@
 
             if (ipAddressSet != null)
             {
-                _pLog.Info("已取得該部門所需通知的IP Address.");
+                Logger.Info("已取得該部門所需通知的IP Address.");
                 ip1 = ipAddressSet[1].ToString();
                 ip2 = ipAddressSet[2].ToString();
                 ipPatrol = ipAddressSet[3].ToString();
             }
             else
             {
-                _pLog.Warn("無法取得該部門所需通知的IP Address!");
+                Logger.Warn("無法取得該部門所需通知的IP Address!");
                 return false;
             }
 
@@ -130,12 +128,12 @@
                 mClient.Shutdown(SocketShutdown.Both);
                 mClient.Close();
                 RecordAlarmIp(acceptNum, ip1);
-                _pLog.Info("已成功通知" + ip1 + " !");
+                Logger.Info("已成功通知" + ip1 + " !");
                 return true;
             }
             catch (Exception e)
             {
-                _pLog.Warn("無法通知" + ip1 + ": " + e.Message);
+                Logger.Warn("無法通知" + ip1 + ": " + e.Message);
             }
 
             try
@@ -153,12 +151,12 @@
                 mClient.Shutdown(SocketShutdown.Both);
                 mClient.Close();
                 RecordAlarmIp(acceptNum, ip2);
-                _pLog.Info("已成功通知" + ip2 + " !");
+                Logger.Info("已成功通知" + ip2 + " !");
                 return true;
             }
             catch (Exception e)
             {
-                _pLog.Warn("無法通知" + ip2 + ": " + e.Message);
+                Logger.Warn("無法通知" + ip2 + ": " + e.Message);
             }
 
             try
@@ -176,13 +174,13 @@
                 mClient.Shutdown(SocketShutdown.Both);
                 mClient.Close();
                 RecordAlarmIp(acceptNum, ipPatrol);
-                _pLog.Info("已成功通知" + ipPatrol + " !");
+                Logger.Info("已成功通知" + ipPatrol + " !");
                 return true;
             }
             catch (Exception e)
             {
-                _pLog.Warn("無法通知" + ipPatrol + ": " + e.Message);
-                _pLog.Warn("三個IP均無法通知到!");
+                Logger.Warn("無法通知" + ipPatrol + ": " + e.Message);
+                Logger.Warn("三個IP均無法通知到!");
                 return false;
             }
         }
@@ -196,11 +194,11 @@
             try
             {
                 if (command.ExecuteNonQuery() <= 0)
-                    _pLog.Warn("無法紀錄Alarm IP!");
+                    Logger.Warn("無法紀錄Alarm IP!");
             }
             catch (Exception e)
             {
-                _pLog.Error("recordAlarmIP Error." + e.Message);
+                Logger.Error("recordAlarmIP Error." + e.Message);
                 return;
             }
             finally
diff --git a/CCSTrace/CCS/Object/CCSCodelist.cs b/CCSTrace/CCS/Object/CCSCodelist.cs
index 48cd876..5cb3b18 100644
--- a/CCSTrace/CCS/Object/CCSCodelist.cs
+++ b/CCSTrace/CCS/Object/CCSCodelist.cs
@@ -5,12 +5,16 @@
 using System.Data.OracleClient;
 using System.Linq;
 using CCSTrace.CCS.Domain;
+using CCSTrace.TPower.DMMS.Model.CCS;
+using NLog;
 
 namespace CCSTrace.CCS.Object
 {
     public class CcsCodelist
     {
-        private readonly Dictionary<int, Dictionary<int, Codelist>> _mTotalData = new Dictionary<int, Dictionary<int, Codelist>>();
+        private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
+
+        private readonly Dictionary<int, Dictionary<int, CODELIST>> _mTotalData = new Dictionary<int, Dictionary<int, CODELIST>>();
 
         public CcsCodelist(OracleConnection connectionTpc)
         {
@@ -26,12 +30,12 @@
                     var keyId = Convert.ToInt32(reader["KEYID"].ToString());
                     var item = (reader["ITEM"].ToString());
                     var content = (reader["CONTENT"].ToString());
-                    Codelist codelist = new Codelist(indexId, keyId, item, content);
+                    CODELIST codelist = new CODELIST(indexId, keyId, item, content);
                     if (!_mTotalData.ContainsKey(indexId))
                     {
-                        _mTotalData.Add(indexId, new Dictionary<int, Codelist>());
+                        _mTotalData.Add(indexId, new Dictionary<int, CODELIST>());
                     }
-                    Dictionary<int, Codelist> keys = _mTotalData[indexId];
+                    Dictionary<int, CODELIST> keys = _mTotalData[indexId];
                     if (keys.ContainsKey(keyId))
                     {
                         keys.Add(keyId, codelist);
@@ -41,8 +45,7 @@
             }
             catch (Exception e)
             {
-                Console.WriteLine("Error on Startup EOSCodelist: " + e.Message);
-                Console.WriteLine(e.StackTrace);
+                Logger.Warn(e, "Error on Startup CCSCodelist: " + e.Message);
             }
             finally
             {
@@ -51,27 +54,27 @@
             }
         }
 
-        public Codelist[] GetAllContent(int mIndexId)
+        public CODELIST[] GetAllContent(int mIndexId)
         {
             return _mTotalData[mIndexId].Values.ToArray();
         }
 
         public string GetContent(int mIndexId, int mKeyId)
         {
-            return _mTotalData[mIndexId][mKeyId].Content;
+            return _mTotalData[mIndexId][mKeyId].CONTENT;
         }
 
         public string GetContent(int mIndexId, string mItem)
         {
             string mResult = "";
 
-            Dictionary<int, Codelist> mTmp = _mTotalData[mIndexId];
+            Dictionary<int, CODELIST> mTmp = _mTotalData[mIndexId];
 
-            foreach (KeyValuePair<int, Codelist> pair in mTmp)
+            foreach (KeyValuePair<int, CODELIST> pair in mTmp)
             {
-                if (pair.Value.Item.Equals(mItem))
+                if (pair.Value.ITEM.Equals(mItem))
                 {
-                    mResult = pair.Value.Content;
+                    mResult = pair.Value.CONTENT;
                     break;
                 }
             }
@@ -80,12 +83,12 @@
 
         public int GetKeyId(int mIndexId, string mContent)
         {
-            Dictionary<int, Codelist> mTmp = _mTotalData[mIndexId];
+            Dictionary<int, CODELIST> mTmp = _mTotalData[mIndexId];
             int mResult = 0;
 
-            foreach (KeyValuePair<int, Codelist> pair in mTmp)
+            foreach (KeyValuePair<int, CODELIST> pair in mTmp)
             {
-                if (pair.Value.Content.Equals(mContent))
+                if (pair.Value.CONTENT.Equals(mContent))
                 {
                     mResult = pair.Key;
                     break;
@@ -96,14 +99,14 @@
 
         public string GetItem(int mIndexId, string mContent)
         {
-            Dictionary<int, Codelist> mTmp = _mTotalData[mIndexId];
+            Dictionary<int, CODELIST> mTmp = _mTotalData[mIndexId];
             string mResult = "";
 
-            foreach (KeyValuePair<int, Codelist> pair in mTmp)
+            foreach (KeyValuePair<int, CODELIST> pair in mTmp)
             {
-                if (pair.Value.Content.Equals(mContent))
+                if (pair.Value.CONTENT.Equals(mContent))
                 {
-                    mResult = pair.Value.Item;
+                    mResult = pair.Value.ITEM;
                     break;
                 }
             }
diff --git a/CCSTrace/CCS/Object/CCSRecord.cs b/CCSTrace/CCS/Object/CCSRecord.cs
index b97ace0..b46f5d9 100644
--- a/CCSTrace/CCS/Object/CCSRecord.cs
+++ b/CCSTrace/CCS/Object/CCSRecord.cs
@@ -1,11 +1,14 @@
 using System;
 
 using System.Data.OracleClient;
+using NLog;
 
 namespace CCSTrace.CCS.Object
 {
     public class CcsRecord
     {
+        private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
+
         private readonly string _meter;
         private readonly string _customerName;
         private readonly string _customerTel;
@@ -45,7 +48,7 @@
             _acceptTime = accepttime;
         }
 
-        public CcsRecord(string ccsid, OracleConnection connectionTpc, SEventLog pLog)
+        public CcsRecord(string ccsid, OracleConnection connectionTpc)
         {
             var sqlStmt = "SELECT METER,CUSTOMERNAME,CUSTOMERTEL,ADDR_CITY,ADDR_TOWN,ADDR_ROAD,ADDR_OTHER,RECALLNAME,RECALLTEL,EVENTBRIEF,"
                              + "TO_CHAR(ACCEPTTIME,'YYYY/MM/DD HH24:MI:SS') as ACCEPTTIME,CCSID,IMPORTCASE,DEPT,PARTHICUSTOMER,NOTE FROM CCS.EVENTRECORD "
@@ -78,13 +81,8 @@
             }
             catch (Exception e)
             {
-                pLog.Error("無法取得CCS報案資訊!" + e.Message);
-                Console.WriteLine(e.StackTrace);
-
-                if (GlobalVariable.ShowError)
-                    pLog.Error(e.StackTrace);
-
-                throw e;
+                Logger.Error(e, "無法取得CCS報案資訊!" + e.Message);
+                throw;
             }
             finally
             {
@@ -125,7 +123,7 @@
 
         public string Note => _note;
 
-        public bool InsertDb(OracleConnection connectionTpc, OracleTransaction transaction, SEventLog pLog)
+        public bool InsertDb(OracleConnection connectionTpc, OracleTransaction transaction)
         {
             var sqlStmt = "INSERT INTO CCS.EVENTRECORD VALUES ('" + _meter + "','" + _customerName + "','" + _customerTel + "','" + _addrCity + "','"
                              + _addrTown + "','" + _addrRoad + "','" + _addrOther + "','" + _recallName + "','" + _recallTel + "',"
@@ -138,20 +136,12 @@
             {
                 if (command.ExecuteNonQuery() != 1)
                 {
-                    pLog.Error("CCS 案件受理程序初始化失敗...無法將CCS報案資訊存入資料庫中!");
-
                     throw new Exception("CCS 案件受理程序初始化失敗...無法將CCS報案資訊存入資料庫中!");
                 }
             }
             catch (Exception e)
             {
-                Console.WriteLine(e.StackTrace);
-
-                if (GlobalVariable.ShowError)
-                    pLog.Error(e.StackTrace);
-
-                pLog.Error("CCS 案件受理程序初始化失敗...無法將CCS報案資訊存入資料庫中!" + e.Message);
-                //throw new Exception("CCS 案件受理程序初始化失敗...無法將CCS報案資訊存入資料庫中");
+                Logger.Error(e, e.Message);
                 throw;
             }
             finally
diff --git a/CCSTrace/CCS/Object/Dept_Contrast.cs b/CCSTrace/CCS/Object/Dept_Contrast.cs
index cd61f36..ecf4ac1 100644
--- a/CCSTrace/CCS/Object/Dept_Contrast.cs
+++ b/CCSTrace/CCS/Object/Dept_Contrast.cs
@@ -2,11 +2,14 @@
 
 using System.Collections;
 using System.Data.OracleClient;
+using NLog;
 
 namespace CCSTrace.CCS.Object
 {
     public class DeptContrast
     {
+        private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
+
         private ArrayList _mTotalData = null;
         public static string DefaultDept = "市區巡修課";
 
diff --git a/CCSTrace/CCS/Object/EOSCodelist.cs b/CCSTrace/CCS/Object/EOSCodelist.cs
index 158383c..f622132 100644
--- a/CCSTrace/CCS/Object/EOSCodelist.cs
+++ b/CCSTrace/CCS/Object/EOSCodelist.cs
@@ -5,12 +5,16 @@
 using System.Data.OracleClient;
 using System.Linq;
 using CCSTrace.CCS.Domain;
+using CCSTrace.TPower.DMMS.Model.CCS;
+using NLog;
 
 namespace CCSTrace.CCS.Object
 {
     public class EosCodelist
     {
-        private readonly Dictionary<int, Dictionary<int, Codelist>> _mTotalData = new Dictionary<int, Dictionary<int, Codelist>>();
+        private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
+
+        private readonly Dictionary<int, Dictionary<int, CODELIST>> _mTotalData = new Dictionary<int, Dictionary<int, CODELIST>>();
 
         public EosCodelist(OracleConnection connection)
         {
@@ -26,12 +30,12 @@
                     var keyId = Convert.ToInt32(reader["KEYID"].ToString());
                     var item = (reader["ITEM"].ToString());
                     var content = (reader["CONTENT"].ToString());
-                    Codelist codelist = new Codelist(indexId, keyId, item, content);
+                    CODELIST codelist = new CODELIST(indexId, keyId, item, content);
                     if (!_mTotalData.ContainsKey(indexId))
                     {
-                        _mTotalData.Add(indexId, new Dictionary<int, Codelist>());
+                        _mTotalData.Add(indexId, new Dictionary<int, CODELIST>());
                     }
-                    Dictionary<int, Codelist>  keys = _mTotalData[indexId];
+                    Dictionary<int, CODELIST>  keys = _mTotalData[indexId];
                     if (keys.ContainsKey(keyId))
                     {
                         keys.Add(keyId, codelist);
@@ -50,27 +54,27 @@
             }
         }
 
-        public Codelist[] GetAllContent(int mIndexId)
+        public CODELIST[] GetAllContent(int mIndexId)
         {
             return _mTotalData[mIndexId].Values.ToArray();
         }
 
         public string GetContent(int mIndexId, int mKeyId)
         {
-            return _mTotalData[mIndexId][mKeyId].Content;
+            return _mTotalData[mIndexId][mKeyId].CONTENT;
         }
 
         public string GetContent(int mIndexId, string mItem)
         {
             string mResult = "";
 
-            Dictionary<int, Codelist> mTmp = _mTotalData[mIndexId];
+            Dictionary<int, CODELIST> mTmp = _mTotalData[mIndexId];
 
-            foreach (KeyValuePair<int, Codelist> pair in mTmp)
+            foreach (KeyValuePair<int, CODELIST> pair in mTmp)
             {
-                if (pair.Value.Item.Equals(mItem))
+                if (pair.Value.ITEM.Equals(mItem))
                 {
-                    mResult = pair.Value.Content;
+                    mResult = pair.Value.CONTENT;
                     break;
                 }
             }
@@ -79,12 +83,12 @@
 
         public int GetKeyId(int mIndexId, string mContent)
         {
-            Dictionary<int, Codelist> mTmp = _mTotalData[mIndexId];
+            Dictionary<int, CODELIST> mTmp = _mTotalData[mIndexId];
             int mResult = 0;
 
-            foreach (KeyValuePair<int, Codelist> pair in mTmp)
+            foreach (KeyValuePair<int, CODELIST> pair in mTmp)
             {
-                if (pair.Value.Content.Equals(mContent))
+                if (pair.Value.CONTENT.Equals(mContent))
                 {
                     mResult = pair.Key;
                     break;
diff --git a/CCSTrace/CCS/Object/EventQuery.cs b/CCSTrace/CCS/Object/EventQuery.cs
index 5af5c49..2c247cb 100644
--- a/CCSTrace/CCS/Object/EventQuery.cs
+++ b/CCSTrace/CCS/Object/EventQuery.cs
@@ -1,10 +1,13 @@
 using System;
 using System.Data.OracleClient;
+using NLog;
 
 namespace CCSTrace.CCS.Object
 {
     public class EventQuery
     {
+        private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
+        
         //private CCS.Function.TransferDate convert = new CCS.Function.TransferDate();
 
         public string CcsId { get; set; }
@@ -27,56 +30,7 @@
 
         public string EventLocation { get; set; } = "";
 
-        public bool Insert(RecordLog pLog, OracleConnection conn, OracleTransaction transaction)
-        {
-            string sqlStmt;
-
-            if (!Check())
-            {
-                return false;
-            }
-
-            if (Meter == null)
-            {
-                sqlStmt =
-                    $"INSERT INTO CCS.EVENTQUERY (CCSID,CASESTATUS,CHANGETIME,ASSUMEDTIME,ASSUMEDTIME_NTH,DELAYTIMES,REASON,INPUTTIME) values(" +
-                    "'" + CcsId
-                    + "'," + CaseStatus + ",to_date('" + ChangeTime + "','yyyy/mm/dd hh24:mi:ss'),to_date('"
-                    + AssumedTime + "','yyyy/mm/dd hh24:mi:ss'),to_date('" + AssumedTimeNth +
-                    "','yyyy/mm/dd hh24:mi:ss')," + DelayTimes + ",'" + Reason + "',SYSDATE)";
-            }
-            else
-            {
-                sqlStmt =
-                    $"INSERT INTO CCS.EVENTQUERY (CCSID,METER,CASESTATUS,CHANGETIME,ASSUMEDTIME,ASSUMEDTIME_NTH,DELAYTIMES,REASON,INPUTTIME) values(" +
-                    "'"
-                    + CcsId + "','" + Meter + "'," + CaseStatus + ",to_date('" + ChangeTime +
-                    "','yyyy/mm/dd hh24:mi:ss'),to_date('" + AssumedTime + "','yyyy/mm/dd hh24:mi:ss'),to_date('"
-                    + AssumedTimeNth + "','yyyy/mm/dd hh24:mi:ss')," + DelayTimes + ",'" + Reason + "',SYSDATE)";
-            }
-
-            var command = new OracleCommand(sqlStmt, conn, transaction);
-
-            try
-            {
-                if (command.ExecuteNonQuery() > 0)
-                    return true;
-                else
-                    return false;
-            }
-            catch (Exception e)
-            {
-                pLog.Error(e.Message);
-                Console.WriteLine(e.StackTrace);
-                return false;
-            }
-            finally
-            {
-                command.Dispose();
-            }
-        }
-
-        public bool Insert(SEventLog pLog, OracleConnection conn, OracleTransaction transaction)
+        public bool Insert(OracleConnection conn, OracleTransaction transaction)
         {
             string sqlStmt;
 
@@ -115,13 +69,8 @@
             }
             catch (Exception e)
             {
-                pLog.Error(e.Message);
-                Console.WriteLine(e.StackTrace);
-
-                if (GlobalVariable.ShowError)
-                    pLog.Error(e.StackTrace);
-
-                throw e;
+                Logger.Error(e, e.Message);
+                throw;
             }
             finally
             {
@@ -129,7 +78,7 @@
             }
         }
 
-        public bool Update(RecordLog pLog, OracleConnection conn, OracleTransaction transaction)
+        public bool Update(OracleConnection conn, OracleTransaction transaction)
         {
             if (!Check())
             {
@@ -148,14 +97,13 @@
             {
                 if (command.ExecuteNonQuery() <= 0)
                 {
-                    pLog.Error("更新CCS.EVENTQUERY資料失敗.");
+                    Logger.Error("更新CCS.EVENTQUERY資料失敗.");
                     return false;
                 }
             }
             catch (Exception e)
             {
-                pLog.Error(e.Message);
-                Console.WriteLine(e.StackTrace);
+                Logger.Error(e, e.Message);
                 return false;
             }
             finally
@@ -166,7 +114,7 @@
             return true;
         }
 
-        public bool UpdateCaseStatus(SEventLog pLog, OracleConnection conn, OracleTransaction transaction)
+        public bool UpdateCaseStatus(OracleConnection conn, OracleTransaction transaction)
         {
             var sqlStmt = "UPDATE CCS.EVENTQUERY SET CASESTATUS = " + CaseStatus + " WHERE CCSID = '" + CcsId + "'";
 
@@ -176,19 +124,14 @@
             {
                 if (command.ExecuteNonQuery() <= 0)
                 {
-                    pLog.Error("更新CCS.EVENTQUERY的CASESTATUS失敗.");
+                    Logger.Error("更新CCS.EVENTQUERY的CASESTATUS失敗.");
                     return false;
                 }
             }
             catch (Exception e)
             {
-                pLog.Error(e.Message);
-                Console.WriteLine(e.StackTrace);
-
-                if (GlobalVariable.ShowError)
-                    pLog.Error(e.StackTrace);
-
-                throw e;
+                Logger.Error(e, e.Message);
+                throw;
             }
             finally
             {
diff --git a/CCSTrace/CCS/Object/EventRecord.cs b/CCSTrace/CCS/Object/EventRecord.cs
index d3add68..4e98475 100644
--- a/CCSTrace/CCS/Object/EventRecord.cs
+++ b/CCSTrace/CCS/Object/EventRecord.cs
@@ -1,9 +1,11 @@
 using System.Data.OracleClient;
+using NLog;
 
 namespace CCSTrace.CCS.Object
 {
     public class EventRecord
     {
+        private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
         //private CCS.Function.TransferDate Convert = new CCS.Function.TransferDate();
 
         public EventRecord(int mCaseId, OracleConnection conn, OracleTransaction trx)
diff --git a/CCSTrace/CCS/Object/LocateEquipment.cs b/CCSTrace/CCS/Object/LocateEquipment.cs
index 6a42b71..6f798e7 100644
--- a/CCSTrace/CCS/Object/LocateEquipment.cs
+++ b/CCSTrace/CCS/Object/LocateEquipment.cs
@@ -1,11 +1,14 @@
 using System;
 
 using System.Data.OracleClient;
+using NLog;
 
 namespace CCSTrace.CCS.Object
 {
     public class LocateEquipment
     {
+        private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
+
         private int _caseId = 0;
         private int _dsUfid = -1;
         private int _fsc = 0;
diff --git a/CCSTrace/CCS/Object/NumberContrast.cs b/CCSTrace/CCS/Object/NumberContrast.cs
index 9265da4..14e9684 100644
--- a/CCSTrace/CCS/Object/NumberContrast.cs
+++ b/CCSTrace/CCS/Object/NumberContrast.cs
@@ -1,11 +1,14 @@
 using System;
 
 using System.Data.OracleClient;
+using NLog;
 
 namespace CCSTrace.CCS.Object
 {
     public class NumberContrast
     {
+        private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
+
         private string _ccsid;
         private string _acceptNum;
         private int _caseId;
diff --git a/CCSTrace/CCS/ProcessEvent.cs b/CCSTrace/CCS/ProcessEvent.cs
index eb3c519..6dad3c0 100644
--- a/CCSTrace/CCS/ProcessEvent.cs
+++ b/CCSTrace/CCS/ProcessEvent.cs
@@ -12,13 +12,12 @@
 
     public class ProcessEvent
     {
-        private static Logger logger = LogManager.GetCurrentClassLogger();
+        private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
 
         private readonly OracleConnection _connectionTpc;
         private readonly CcsRecord _mCcsRecord;
 
         private EventRecord _mEventRecord;
-        private readonly RecordLog _pLog;
         private readonly string _traceConnectionString = string.Empty;
         private OracleTransaction _trx;
 
@@ -27,7 +26,6 @@
             _mCcsRecord = record;
             _connectionTpc = conn;
             _traceConnectionString = traceConnection;
-            _pLog = new RecordLog(GlobalVariable.CcsListPath + record.CcsId + ".txt");
         }
 
         public event ThreadEndEventHandler ThreadFinish;
@@ -74,47 +72,47 @@
                 */
                 if (InitialEventRecord(_mCcsRecord.CcsId))
                 {
-                    var mLeach = new Leach(_connectionTpc, _trx, _traceConnectionString, _pLog); // 案件過濾與合併
-                    _pLog.Info("過濾案件...");
+                    var mLeach = new Leach(_connectionTpc, _trx, _traceConnectionString); // 案件過濾與合併
+                    Logger.Info("過濾案件...");
                     var returnStatus = mLeach.LeachCase(_mEventRecord);
 
                     switch (returnStatus)
                     {
                         case GlobalVariable.Success:
-                            _pLog.Info("案件過濾完畢....");
+                            Logger.Info("案件過濾完畢....");
                             Process(GlobalVariable.Success);
                             break;
 
                         case GlobalVariable.NoMeter:
-                            _pLog.Info("案件過濾完畢,用戶無電號....");
+                            Logger.Info("案件過濾完畢,用戶無電號....");
                             _mEventRecord.TraceFinish = GlobalVariable.TraceFinish;
                             Process(GlobalVariable.NoMeter);
                             break;
 
                         case GlobalVariable.SameCustomer:
-                            _pLog.Info("相同用戶重複來電....");
+                            Logger.Info("相同用戶重複來電....");
                             ProcessSameCustomer(_mCcsRecord, _mEventRecord);
                             break;
 
                         case GlobalVariable.NoSupplyElc:
-                            _pLog.Warn("該饋線未供電,無法作事故案件追蹤合併....");
+                            Logger.Warn("該饋線未供電,無法作事故案件追蹤合併....");
                             _mEventRecord.TraceFinish = GlobalVariable.TraceFinish;
                             Process(GlobalVariable.NoMeter);
                             break;
 
                         case GlobalVariable.NoSxfmr:
-                            _pLog.Warn("該案件無變壓器....");
+                            Logger.Warn("該案件無變壓器....");
                             _mEventRecord.TraceFinish = GlobalVariable.TraceFinish;
                             Process(GlobalVariable.NoMeter);
                             break;
 
                         case GlobalVariable.CaseTypeChanged:
-                            _pLog.Info("變更案件狀態....");
+                            Logger.Info("變更案件狀態....");
                             Process(GlobalVariable.CaseTypeChanged);
                             break;
 
                         case GlobalVariable.TraceFailure:
-                            _pLog.Error("故障追蹤錯誤,以一般無電號案件方式受理....");
+                            Logger.Error("故障追蹤錯誤,以一般無電號案件方式受理....");
                             _mEventRecord.TraceFinish = GlobalVariable.TraceFinish;
                             Process(GlobalVariable.NoMeter);
                             break;
@@ -130,13 +128,13 @@
                                 _trx.Dispose();
 
                                 if (returnStatus == GlobalVariable.CaseTransfer)
-                                    _pLog.Error("案件已移轉,此事故案件暫不被受理....");
+                                    Logger.Error("案件已移轉,此事故案件暫不被受理....");
                                 else if (returnStatus == GlobalVariable.FailureByDb)
-                                    _pLog.Error("資料庫錯誤,此事故案件暫不被受理....");
+                                    Logger.Error("資料庫錯誤,此事故案件暫不被受理....");
                                 else if (returnStatus == GlobalVariable.FdrLocked)
-                                    _pLog.Error("饋線被鎖定,此事故案件暫不被受理....");
+                                    Logger.Error("饋線被鎖定,此事故案件暫不被受理....");
                                 else
-                                    _pLog.Error("發生非預期錯誤,此事故案件暫不被受理....");
+                                    Logger.Error("發生非預期錯誤,此事故案件暫不被受理....");
 
                                 if (traceCount == 0)
                                     UpdateTraceCount(_mCcsRecord.CcsId, true);
@@ -149,7 +147,7 @@
                                 if (returnStatus == GlobalVariable.TraceCounts3)
                                     _mEventRecord.Note = _mEventRecord.Note+ "(本案用戶供電資料追蹤失敗)";
 
-                                _pLog.Error("事故案件處理次數3次,仍無法正常處理,以一般無電號案件方式受理....");
+                                Logger.Error("事故案件處理次數3次,仍無法正常處理,以一般無電號案件方式受理....");
                                 _mEventRecord.TraceFinish = GlobalVariable.TraceFinish;
                                 Process(GlobalVariable.NoMeter);
                                 sendMail = true;
@@ -239,8 +237,7 @@
             }
             catch (Exception e)
             {
-                Console.WriteLine("Error = " + e.Message + ". CCSID = " + _mCcsRecord.CcsId);
-                _pLog.Error("Error = " + e.Message + ". CCSID = " + _mCcsRecord.CcsId);
+                Logger.Error(e, e.Message + ". CCSID = " + _mCcsRecord.CcsId);
 
                 if (_trx != null)
                 {
@@ -256,7 +253,6 @@
             }
             finally
             {
-                _pLog.Close();
                 CcsMain.ProcessCases.Remove(_mCcsRecord.CcsId);
                 OnThreadFinish(new ThreadEndEvent(_connectionTpc));
             }
@@ -271,12 +267,12 @@
 
             try
             {
-                if (finishEvent.Finish(kind, _mEventRecord, _connectionTpc, _trx, _pLog))
+                if (finishEvent.Finish(kind, _mEventRecord, _connectionTpc, _trx))
                 {
-                    _pLog.Info("OMS資料更新成功!");
+                    Logger.Info("OMS資料更新成功!");
                     if (UpdateCcsData(_mEventRecord, _mCcsRecord, (int) CCSCaseState.WaitForDespatch))
                     {
-                        _pLog.Info("CCS資料更新成功!");
+                        Logger.Info("CCS資料更新成功!");
                     }
                     else
                     {
@@ -284,7 +280,7 @@
                             _trx.Rollback();
 
                         _trx.Dispose();
-                        _pLog.Error("CCS資料更新程序發生錯誤!");
+                        Logger.Error("CCS資料更新程序發生錯誤!");
                         return;
                     }
 
@@ -292,7 +288,7 @@
                     _trx.Commit();
                     _trx.Dispose();
                     ;
-                    var alarmClient = new AlarmData(_connectionTpc, _trx, _pLog);
+                    var alarmClient = new AlarmData(_connectionTpc, _trx);
                     alarmClient.Alarm(_mEventRecord.AcceptNum, _mEventRecord.Dept);
                 }
                 else
@@ -303,9 +299,9 @@
 
                     _trx.Dispose();
                     ;
-                    _pLog.Error("OMS資料更新程序發生錯誤!");
+                    Logger.Error("OMS資料更新程序發生錯誤!");
                 }
-                _pLog.Info("CCS 案件受理程序結束.");
+                Logger.Info("CCS 案件受理程序結束.");
             }
             catch (Exception e)
             {
@@ -323,7 +319,7 @@
 
         private bool UpdateCcsData(EventRecord mRecord, CcsRecord mCcsRecord, int caseStatus)
         {
-            _pLog.Info("進行CCS資料更新程序...");
+            Logger.Info("進行CCS資料更新程序...");
             var eventQuery = new EventQuery();
             var status = caseStatus;
             // 設定CCSID
@@ -355,12 +351,12 @@
             }
             eventQuery.CaseStatus = status;
             // 更新CCS.EventQuery
-            if (!eventQuery.Update(_pLog, _connectionTpc, _trx))
+            if (!eventQuery.Update(_connectionTpc, _trx))
             {
-                _pLog.Error("更新ccs.eventquery失敗!");
+                Logger.Error("更新ccs.eventquery失敗!");
                 return false;
             }
-            _pLog.Info("更新ccs.eventquery成功!");
+            Logger.Info("更新ccs.eventquery成功!");
             var numberContrast = new NumberContrast();
             numberContrast.SetAcceptNum(mRecord.AcceptNum);
             numberContrast.SetCaseId(mRecord.CaseId);
@@ -368,16 +364,16 @@
             // 更新CCS.Num_Contrast
             if (!numberContrast.Update(_connectionTpc, _trx))
             {
-                _pLog.Error("更新ccs.num_contrast失敗!");
+                Logger.Error("更新ccs.num_contrast失敗!");
                 return false;
             }
-            _pLog.Info("更新ccs.num_contrast成功!");
+            Logger.Info("更新ccs.num_contrast成功!");
             return true;
         }
 
         private bool InitialEventRecord(string ccsid)
         {
-            var initialData = new InitialEventData(_connectionTpc, _pLog);
+            var initialData = new InitialEventData(_connectionTpc);
             var mContrast = new NumberContrast();
             DeptContrast deptContrast = null;
 
@@ -394,7 +390,7 @@
 
             if (!mContrast.Insert(_connectionTpc, _trx))
             {
-                _pLog.Error("初始化寫入CCS.Num_Contrast時發生錯誤!");
+                Logger.Error("初始化寫入CCS.Num_Contrast時發生錯誤!");
 
                 if (_trx.Connection.State.ToString().Equals("Open"))
                     _trx.Rollback();
@@ -435,7 +431,7 @@
 
             if (mAddr.Trim().Length == 0)
             {
-                _pLog.Error("CCS 案件受理程序初始化失敗...地址為空白");
+                Logger.Error("CCS 案件受理程序初始化失敗...地址為空白");
 
                 if (_trx.Connection.State.ToString().Equals("Open"))
                     _trx.Rollback();
@@ -506,7 +502,7 @@
                 _mEventRecord.IsReCall = GlobalVariable.NotReCall;
             }
 
-            _pLog.Info("初始化EOS.EVENTRECORD成功!");
+            Logger.Info("初始化EOS.EVENTRECORD成功!");
             return true;
         }
 
@@ -546,7 +542,7 @@
             }
             catch (Exception ex)
             {
-                _pLog.Warn("Problems occur during checking process: " + ex.Message);
+                Logger.Warn(ex, "Problems occur during checking process: " + ex.Message);
             }
             finally
             {
@@ -557,7 +553,7 @@
 
         private int FindoutDeptByAddr(CcsRecord ccsRecord, OracleTransaction trx)
         {
-            var addrContrast = new AddrContrast(_connectionTpc, trx, _pLog);
+            var addrContrast = new AddrContrast(_connectionTpc, trx);
             return addrContrast.FindDeptId(ccsRecord.AddressCity, ccsRecord.AddressTown, ccsRecord.AddressRoad);
         }
 
@@ -596,9 +592,10 @@
                     status = Convert.ToInt32(reader["CaseStatus"].ToString());
                 }
             }
-            catch (Exception)
+            catch (Exception e)
             {
-                _pLog.Warn("無法取得正確之母案件狀態.");
+                Logger.Error(e, e.Message);
+                Logger.Warn("無法取得正確之母案件狀態.");
             }
             finally
             {
@@ -632,9 +629,10 @@
                     mEventQry.EventLocation = reader["eventlocation"].ToString();
                 }
             }
-            catch (Exception)
+            catch (Exception e)
             {
-                _pLog.Warn("無法取得母案件派工資訊.");
+                Logger.Error(e, e.Message);
+                Logger.Warn("無法取得母案件派工資訊.");
             }
             finally
             {
@@ -648,7 +646,7 @@
 
         private void ProcessSameCustomer(CcsRecord mCcsRecord, EventRecord mEventRec)
         {
-            _pLog.Info("處理相同用戶重複來電...");
+            Logger.Info("處理相同用戶重複來電...");
             StringBuilder note = null;
 
             var sqlStmt = "select note from eos.eventrecord where caseid = " + mEventRec.TmpCaseId;
@@ -662,8 +660,7 @@
             }
             catch (Exception e)
             {
-                Console.WriteLine(e.Message);
-                Console.WriteLine(e.StackTrace);
+                Logger.Error(e, e.Message);
             }
             finally
             {
@@ -780,7 +777,7 @@
                 }
                 catch (Exception e)
                 {
-                    Console.WriteLine(e.Message);
+                    Logger.Error(e, e.Message);
                 }
                 finally
                 {
@@ -792,10 +789,10 @@
                 }
             }
 
-            var updEosEventRecord = "update eos.eventrecord set note = '" + TrimToLimit(note.ToString(), 127)
+            var updEosEventRecord = "UPDATE EOS.EVENTRECORD SET NOTE = '" + TrimToLimit(note.ToString(), 127)
                                     + "' where caseid = " + _mEventRecord.TmpCaseId;
-            var updCcsNumContrast = "update ccs.num_contrast set(acceptnum,caseid) = (select acceptnum," +
-                                    mEventRec.TmpCaseId                                    + " from eos.eventrecord where caseid = " + mEventRec.TmpCaseId+
+            var updCcsNumContrast = "UPDATE CCS.NUM_CONTRAST SET(acceptnum,caseid) = (SELECT acceptnum," +
+                                    mEventRec.TmpCaseId                                    + " FROM eos.eventrecord WHERE caseid = " + mEventRec.TmpCaseId+
                                     ") where ccsid='" + mCcsRecord.CcsId + "'";
 
             var exeCommand = new OracleCommand(updCcsEventQuery, _connectionTpc, _trx);
@@ -808,7 +805,7 @@
                     _trx.Rollback();
 
                 _trx.Dispose();
-                _pLog.Error("Fail in write back to ccs.eventquery");
+                Logger.Error("Fail in write back to ccs.eventquery");
                 return;
             }
 
@@ -822,7 +819,7 @@
                     _trx.Rollback();
 
                 _trx.Dispose();
-                _pLog.Error("Fail in update eos.eventquery");
+                Logger.Error("Fail in update eos.eventquery");
                 return;
             }
 
@@ -835,14 +832,14 @@
                     _trx.Rollback();
 
                 _trx.Dispose();
-                _pLog.Error("Fail in insert into ccs.num_contrast");
+                Logger.Error("Fail in insert into ccs.num_contrast");
                 return;
             }
 
             exeCommand.Dispose();
             _trx.Commit();
             _trx.Dispose();
-            _pLog.Info("CCS 案件受理程序結束");
+            Logger.Info("CCS 案件受理程序結束");
         }
 
         private string TrimToLimit(string msg, int maxLen)
@@ -857,12 +854,12 @@
                 {
                     return msg;
                 }
-                msg = msg.Substring(msg.IndexOf("|") + 1);
+                msg = msg.Substring(msg.IndexOf("|", StringComparison.Ordinal) + 1);
                 return TrimToLimit(msg, maxLen);
             }
-            catch (Exception ex)
+            catch (Exception e)
             {
-                Console.WriteLine(ex.StackTrace);
+                Logger.Error(e, e.Message);
                 return "";
             }
         }
@@ -882,8 +879,7 @@
             }
             catch (Exception e)
             {
-                Console.WriteLine(e.Message);
-                Console.WriteLine(e.StackTrace);
+                Logger.Error(e, e.Message);
             }
             finally
             {
@@ -947,8 +943,7 @@
             }
             catch (Exception e)
             {
-                Console.WriteLine(e.Message);
-                Console.WriteLine(e.StackTrace);
+                Logger.Error(e, e.Message);
             }
             finally
             {
@@ -973,8 +968,7 @@
             }
             catch (Exception e)
             {
-                Console.WriteLine(e.Message);
-                Console.WriteLine(e.StackTrace);
+                Logger.Error(e, e.Message);
             }
             finally
             {
@@ -1004,8 +998,7 @@
             }
             catch (Exception e)
             {
-                Console.WriteLine(e.Message);
-                Console.WriteLine(e.StackTrace);
+                Logger.Error(e, e.Message);
             }
             finally
             {
diff --git a/CCSTrace/CCS/RecordLog.cs b/CCSTrace/CCS/RecordLog.cs
index 9925cd7..ae7c5d9 100644
--- a/CCSTrace/CCS/RecordLog.cs
+++ b/CCSTrace/CCS/RecordLog.cs
@@ -1,45 +1,36 @@
 using System;
 using System.IO;
+using NLog;
 
 namespace CCSTrace.CCS
 {
     public class RecordLog
     {
-        private readonly StreamWriter _sWriter = null;
-
-        public RecordLog(string filePath)
-        {
-            _sWriter = new StreamWriter(filePath, true);
-        }
+        private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
 
         public void Debug(object message)
         {
-            _sWriter.WriteLine("[Debug] [" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + "] : " + message);
+            Logger.Debug(message);
         }
 
         public void Error(object message)
         {
-            _sWriter.WriteLine("[Error] [" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + "] : " + message);
+            Logger.Error(message);
         }
 
         public void Fatal(object message)
         {
-            _sWriter.WriteLine("[Fatal] [" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + "] : " + message);
+            Logger.Fatal(message);
         }
 
         public void Info(object message)
         {
-            _sWriter.WriteLine("[Info] [" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + "] : " + message);
+            Logger.Info(message);
         }
 
         public void Warn(object message)
         {
-            _sWriter.WriteLine("[Warn] [" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + "] : " + message);
-        }
-
-        public void Close()
-        {
-            _sWriter.Close();
+            Logger.Warn(message);
         }
     }
 }
\ No newline at end of file
diff --git a/CCSTrace/CCSTrace.csproj b/CCSTrace/CCSTrace.csproj
index 79cc36c..2d25265 100644
--- a/CCSTrace/CCSTrace.csproj
+++ b/CCSTrace/CCSTrace.csproj
@@ -119,13 +119,11 @@
   <ItemGroup>
     <Compile Include="CCS\CCSMain.cs" />
     <Compile Include="CCS\Domain\CCSCaseState.cs" />
-    <Compile Include="CCS\Domain\Codelist.cs" />
     <Compile Include="CCS\EventAI\Equipment.cs" />
     <Compile Include="CCS\EventAI\JudgeCase.cs" />
     <Compile Include="CCS\EventAI\TraceSubject.cs" />
     <Compile Include="CCS\Function\MailService.cs" />
     <Compile Include="CCS\GlobalVariable.cs" />
-    <Compile Include="CCS\SEventLog.cs" />
     <Compile Include="CCS\FinishEvent.cs" />
     <Compile Include="CCS\Function\InitialEventData.cs" />
     <Compile Include="CCS\Function\Leach.cs" />
@@ -158,7 +156,7 @@
     <Compile Include="TPower\DMMS\Model\BaseDB\SXFMR.cs" />
     <Compile Include="TPower\DMMS\Model\CCS\ADDRCONTRAST.cs" />
     <Compile Include="TPower\DMMS\Model\CCS\ALARMIP.cs" />
-    <Compile Include="TPower\DMMS\Model\CCS\CODELIST.CODELIST.cs" />
+    <Compile Include="TPower\DMMS\Model\CCS\CODELIST.cs" />
     <Compile Include="TPower\DMMS\Model\CCS\DEPTCONTRAST.cs" />
     <Compile Include="TPower\DMMS\Model\CCS\EVENTQUERY.cs" />
     <Compile Include="TPower\DMMS\Model\CCS\EVENTRECORD.cs" />
diff --git a/CCSTrace/Global.asax.cs b/CCSTrace/Global.asax.cs
index eedd5fd..e7dae74 100644
--- a/CCSTrace/Global.asax.cs
+++ b/CCSTrace/Global.asax.cs
@@ -5,15 +5,20 @@
 using System.Web.Security;
 using System.Web.SessionState;
 using CCSTrace.CCS;
+using NLog;
 
 namespace CCSTrace
 {
     public class Global : System.Web.HttpApplication
     {
+        private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
 
         protected void Application_Start(object sender, EventArgs e)
         {
+            Logger.Info("CCSTrace WebService Application Startup.");
             CcsMain appMain = CcsMain.Instance();
+            string path = HttpContext.Current.Server.MapPath("~/App_Data");
+            appMain.AppDataPath = path;
             appMain.Startup();
         }
 
@@ -44,6 +49,7 @@
 
         protected void Application_End(object sender, EventArgs e)
         {
+            Logger.Info("CCSTrace WebService Application Shutdown.");
             CcsMain appMain = CcsMain.Instance();
             appMain.Shutdown();
         }
diff --git a/CCSTrace/NLog.config b/CCSTrace/NLog.config
index a5fc24d..f4cd4d4 100644
--- a/CCSTrace/NLog.config
+++ b/CCSTrace/NLog.config
@@ -29,8 +29,23 @@
     <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
             layout="${longdate} ${uppercase:${level}} ${message}" />
     -->
+    <target xsi:type="File" name="file"
+                fileName="${basedir}/App_Data/Logs/${shortdate}/ccstrace-${logger}.txt"
+                layout="${longdate} | ${level:uppercase=true} | ${logger} | ${message} ${newline}" />
+    <target xsi:type="File" name="fileRecord"
+                fileName="${basedir}/App_Data/Logs/${shortdate}/ccsrecord-${logger}.txt"
+                layout="${longdate} | ${level:uppercase=true} | ${logger} | ${message} ${newline}" />
+    <target xsi:type="File" name="FatalFile"
+                fileName="${basedir}/App_Data/Logs/${shortdate}/FatalFile.txt"
+                layout="${longdate} | ${level:uppercase=true} | ${logger} | ${message} ${newline}" />
+    <target xsi:type="EventLog" name="eventlog"
+                source="CCSTrace" log="Application"
+                layout="${date}: ${message} ${stacktrace}" />
+    <target xsi:type="Trace" name="traceLog" 
+                layout="${longdate} | ${level:uppercase=true} | ${logger} | ${message} ${newline}" />
+    <target xsi:type="Console" name="consoleLog"
+                layout="${longdate} | ${level:uppercase=true} | ${logger} | ${message} ${newline}" />
   </targets>
-
   <rules>
     <!-- add your logging rules here -->
 
@@ -38,5 +53,12 @@
     Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace)  to "f"
     <logger name="*" minlevel="Debug" writeTo="f" />
     -->
+    <logger name="*" levels="Trace, Debug, Info, Warn, Error, Fatal" writeTo="file" />
+    <logger name="*" levels="Trace, Debug, Info, Warn, Error, Fatal" writeTo="consoleLog" />
+    <logger name="*" levels="Trace, Debug, Info, Warn, Error, Fatal" writeTo="traceLog"/>
+    <logger name="*" level="Warn, Error, Fatal" writeTo="FatalFile" />
+    <logger name="*" level="Warn, Error, Fatal" writeTo="eventlog" />
+    <logger name="CCSTrace.CCS.SEventLog" writeTo="eventlog" />
+    <logger name="CCSTrace.CCS.RecordLog" writeTo="fileRecord" />
   </rules>
 </nlog>
\ No newline at end of file
diff --git a/CCSTrace/Service1.asmx.cs b/CCSTrace/Service1.asmx.cs
index ebbab77..146a13d 100644
--- a/CCSTrace/Service1.asmx.cs
+++ b/CCSTrace/Service1.asmx.cs
@@ -31,7 +31,7 @@
                                                                              addrOther, recallname, recalltel, eventbrief, accepttime, importcase, dept,
                                                                              partHicustomer, note);
             //_CCSMain.AcceptEvent(_Record);
-            CCSTrace.CCS.CcsMain.Instance().AcceptEvent(record);
+            CCS.CcsMain.Instance()?.AcceptEvent(record);
         }
 
 

--
Gitblit v0.0.0-SNAPSHOT