Asp.Net MVC中記錄錯誤日誌保存到本地txt文件

来源:https://www.cnblogs.com/w5942066/archive/2019/05/17/10882347.html
-Advertisement-
Play Games

為了方便查詢系統出錯弄個錯誤日誌出來對於維護運維來說是很有必要的。 1、在Asp.Net MVC項目中的App_Start添加一個用於處理異常類的文件ErrorLog讓他繼承HandleErrorAttribute類並重寫OnException方法 在視圖裡面的shared文件夾下麵加一個Error ...


為了方便查詢系統出錯弄個錯誤日誌出來對於維護運維來說是很有必要的。

1、在Asp.Net MVC項目中的App_Start添加一個用於處理異常類的文件ErrorLog讓他繼承HandleErrorAttribute類並重寫OnException方法

public class ErrorLog: HandleErrorAttribute
    {
        public override void OnException(ExceptionContext filterContext)
        {
            if(!filterContext.ExceptionHandled)
            {
                //當前Controller名稱
                string controllName = (string)filterContext.RouteData.Values["controller"];
                //當前Action
                string actionName = (string)filterContext.RouteData.Values["action"];
                //定義一個HandErrorInfo,用於Error視圖展示異常信息
                HandleErrorInfo model = new HandleErrorInfo(filterContext.Exception, controllName, actionName);
                //時間用來給txt命名
                string thisTime = DateTime.Now.ToString("yyyyMMdd");
                string errorDetails = $"出錯時間:{DateTime.Now.ToString()},錯誤發生在{model.ControllerName}控制器的{model.ActionName},錯誤類型:{model.Exception.Message}";
                string splitLine = "============================下一條==============================";
                //日誌存放位置,在項目目錄裡面一個月一個文件夾,一天一個文件
                string path = HttpContext.Current.Server.MapPath(@"\ErrorLog\" + DateTime.Now.Year.ToString()+ @"\" + DateTime.Now.ToString("MM") + @"\" );
                //判斷文件夾不存在就創建
                if (!Directory.Exists(path))
                    Directory.CreateDirectory(path);
                //寫入日誌
                using (System.IO.StreamWriter file = new System.IO.StreamWriter(path + thisTime+".txt", true))
                {
                    file.WriteLine(errorDetails);
                    file.WriteLine(model.Exception.StackTrace);
                    file.WriteLine(splitLine);

                }
                //出錯跳轉到指定頁面,如果Global.asax寫了Application_Error方法可以不用寫
                ViewResult result = new ViewResult
                {
                    ViewName = this.View,//設置異常時跳轉的404頁面
                    ViewData = new ViewDataDictionary<HandleErrorInfo>(model)  //定義ViewData,泛型
                };
                filterContext.Result = result;
                filterContext.ExceptionHandled = true;//設置異常已處理

            }
        }
    }

 在視圖裡面的shared文件夾下麵加一個Error視圖,裡面就是錯誤日誌,類似於404頁面一樣的功能

2、在App_Start文件夾下麵的FilterConfig.cs文件裡面配置

public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new ErrorLog() { View="Error"});
        }
    }

 

ErrorLog別寫錯了,裡面有個原始的HandleErrorAttribute類改名為你第一步添加的類

3、最後看一下Gloabl.asax裡面註冊了FilterConfig沒有,一般都是有的

public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
    }

 4、調用實例,我寫的一個圖片上傳,沒有文件夾拋異常

/// <summary>
        /// 圖片上傳
        /// </summary>
        /// <param name="file">圖片</param>
        /// <returns></returns>
        public ActionResult FileUpLoad1(HttpPostedFileBase file)
        {
            var ret = string.Empty;
            try
            {
                string fileName = Guid.NewGuid()+file.FileName;
                string filePath = Server.MapPath(@"\FileUp2\");
                //if (!Directory.Exists(filePath))
                   // Directory.CreateDirectory(filePath);
                file.SaveAs(Path.Combine(filePath, fileName));

            }
            catch (Exception ex)
            {
                ret = ex.Message + ":" + ex.InnerException;
                throw new Exception (ex.Message + ":" + ex.InnerException);
            }
            if(string.IsNullOrEmpty(ret))
                return Json(new { code = "0", msg = "文件上傳成功!", data = "" });
            else
                return Json(new { code = "1", msg = "文件上傳失敗!", data = ret });
        }

 註意要想記錄日誌一定要把異常拋出來  就是 throw new Exception (ex.Message + ":" + ex.InnerException);

5、下麵的效果 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文原創並首發於公眾號【 Python貓 】,未經授權,請勿轉載。 原文地址:https://mp.weixin.qq.com/s/ fFVTgWVsydFsNu1nyxUzA Python 是一門強大的動態語言,那動態體現在哪裡,強大又體現在哪裡呢?除了好的方面,Python 的動態性是否還藏著一 ...
  • PHP Standards Recommendation PHP標準推薦 https://www.php-fig.org/psr/ PSR-1:基礎代碼標準 PHP文件必須使用<?php 和 <?= 標記。 PHP文件必須使用不帶BOM頭的UTF8編碼格式保存。 PHP文件中要麼只包含定義語句(例: ...
  • 登錄實現 HTML代碼 CSS: PHP: 註冊實現 HTML: CSS: PHP: ...
  • 目錄操作 mkdir 創建目錄 opendir 打開目錄 readdir 讀取打開目錄中的一個文件 scandir 列出指定路徑下的文件和目錄 closedir 關閉目錄 is_dir 判斷是否為目錄 rmdir 刪除非空目錄 讀取目錄中有兩個特殊的文件 . 和 .. 分別代表當前目錄和上一級目錄 ...
  • 在Sqlserver資料庫的字元串操作中,截取字元串是最常見的操作,sql server提供了3個常用截取字元串方法,LEFT()、RIGHT()、SUBSTRING(),如果從第一個字元即最左邊位置開始截取規定長度,則可用Left函數,如果從最後的字元往前截取固定長度則可使用Right函數,SUB ...
  • 在C#程式開發過程中,很多時候可能需要將字元串根據特定的分割字元分割成字元或者List集合,例如根據逗號將字元串分割為數組,或者根據豎線將字元串分割成數組,C#中提供了Split()函數來快速將字元串分割成數組形式,如果需要轉換為List集合,可在分割完成後使用數組的ToList()方法即可轉換為L ...
  • 在ASP.NET開發過程中,安全性是必須要重中之重需要考慮的,其中一種情況是要防止用戶輸入惡意腳本入侵的情況,惡意腳本入侵指的是用戶在提交內容中提交了包含特殊Javascript腳本程式等非法信息,如包含<script></script>等信息。這些腳本信息如果沒有做相應的處理,伺服器將這些內容信息 ...
  • 在C#的編程開發過程中,很多時候涉及到數據類型的轉換,可使用強制轉換的方式,不過強制轉換數據類型有時候會拋出程式異常錯誤,可以使用as關鍵字來進行類型的轉換,如果轉換成功將返迴轉換後的對象,如果轉換不成功則不會拋出異常而是返回NULL。 如將A類型的對象modelA轉換為B類型的對象,可使用下列語句 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...