2017-03-10 35 views
-1

我正在開發一個MVC應用程序。我有一個控制器,它有方法。控制器方法調用存儲庫方法。存儲庫方法連接到數據庫以獲取信息。當應用程序無法連接到數據庫時發生日誌異常

由於當方法中存在異常時,我將該信息記錄在數據庫日誌表中,但是我遇到了應用程序無法連接到數據庫本身的情況,這種情況下有什麼選擇記錄該異常以及如何處理該異常。

當我使用fiddler並跟蹤請求時,我可以發現Controller方法拋出異常,並且我可以跟蹤查看響應的根​​本原因,但是在生產環境中我該如何處理這種情況。 &如果應用程序無法連接到數據庫,我該如何登錄。

+0

如何使用登錄文件? –

+0

「如果應用程序無法連接到數據庫」可以指定連接是否失敗或插入命令是否失敗。 如果連接失敗,那麼你應該查看更嚴重的問題,然後解決日誌記錄 – DaniDev

+0

@DaniDev:找出更多問題的第一步是記錄問題的細節?我的意思是,我假設日誌記錄將包括記錄無法連接到數據庫,包括相關的異常詳細信息... – Chris

回答

0

如果您有權訪問服務器,則可以在服務器中的應用程序事件日誌下登錄。

1

您確實應該寫入事件日誌,最好是使用自定義事件源,以便您的服務器團隊可以輕鬆地在事件查看器中排序和查找問題。

這是非常簡單的寫日誌類來做到這一點: https://support.microsoft.com/en-us/help/307024/how-to-write-to-an-event-log-by-using-visual-c

唯一的「疑難雜症」,沒有一個提到的是,當您使用自定義甚至是源,你的應用程序池的標識必須能夠訪問在機器上創建源代碼或將失敗並置於通用錯誤之下。有些人喜歡通過自己創建機器來準備機器,有些人喜歡通過PowerShell腳本將其作爲部署步驟來完成。無論漂浮你的船。

https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.management/new-eventlog

你應該在DB做的唯一記錄是應用程序的審計跟蹤記錄。

1

有幾種方法可以做到這一點。我會把我能想到的清單放在我頭上。有幾個選項對localhost更重要(在您的機器開發過程中)。我傾向於在這個階段包含網絡問題。開發者的機器有幾次出現網絡問題,並且無法使用其他選項。生產後(Intranet應用程序仍應包括Internet連接問題),客戶顯然是通過Internet訪問它。

  1. 高級選項:使用高級服務,如Azure應用程序洞察。這是非常強大的,因爲您可以設置自定義事件並在每個用戶ID的基礎上生成報告/過濾器。我不確定在亞馬遜或谷歌雲上是否有類似的選項可用。可能是其他人可以在這裏說明一些情況。這是我喜歡的方式。它也可以記錄每個方法的問題並生成警報。非常便利。 What is Application Insights?
  2. 在線數據記錄服務:這些也可以是有用的,但我想不出它們比選項1更好。這裏有很多選項。只是谷歌這個詞。幾年前,我在機器人項目中使用了其中的幾個(2005年)。

  3. DataStorage方式:如果需要,可使用簡單的存儲,如Azure Blob存儲或任何其他NoSQL存儲。我相信亞馬遜或其他雲服務提供它。只需推送數據而不用擔心創建表格模式等。一旦建立了連接,像(Azure,Amazon或Google)這樣的優質服務提供商就沒有可用的存儲空間供您記錄。
    在亞馬遜我認爲是Amazon Simple Storage Service
    它曾經是谷歌上的Blobstore,但現在他們聲稱有Cloud Storage高級選項。
    我還沒有使用它,所以不太瞭解它。任何人!??

  4. 讓你直接知道:如果你不想在任何地方存儲數據,發送錯誤的電子郵件可以是一個選項。而且,這只是我能想到的免費選項,它可以在不登錄服務器的情況下遠程通知您。如果您想玩智能遊戲,您可以將這些電子郵件發送到敏捷開發板中的日誌/任務。
    這是我喜歡的方式。我與選項1一起執行此操作,以記錄TeamServices中的錯誤。然後,TeamServices可以通過自己的通知服務讓分配的潛在客戶。無論如何你會這樣做來報告一個錯誤,爲什麼不讓你的應用程序爲你提供所有可用的信息。
    你可以使用像https://zapier.com/這樣的服務,它直接與Jira/TS/Bootcamp等整合。還有很多免費工具。

  5. 本地文件:在服務器上創建日期戳文件。這在沒有互聯網連接時很有用。對於localhost環境或Intranet網站,非常有用(少數可用選項之一)。如果機器可以訪問互聯網,並且想要使用此選項,則還可以使用Google Drive/Dropbox/OneDrive或您選擇的任何其他選項自動同步此文件。只需避免每分鐘登錄到服務器以檢查是否有文件!

  6. 服務器/系統日誌記錄:如@ Riddle03所述,登錄應用程序事件日誌可能很有用。這在localhost /僅限Intranet的環境中也很有用。

  7. 你爲什麼要這麼做選項:讓你的應用程序鳴叫它,讓世界知道你的系統剛剛遇到問題,你會忙着修復它!

在哪裏把代碼記錄下來?完全取決於你的應用程序的配置。我通過我的數據總線中的LoggerService來完成它,它負責建立任何Db連接。

相關問題