Sử dụng Log4Net để ghi log trong Asp.Net

Log4Net là một thư viện mã nguồn mở, nó được thiết kế một cách linh hoạt với nhiều cách ghi log và định dạng log khác nhau.  Bên cạnh đó sử dụng Log4Net cũng không ảnh hưởng đáng kể đến performance của hệ thống, hỗ trợ rất đắc lực cho chúng ta trong những trường hợp ghi log lỗi hệ thống, giúp nhanh chóng tìm ra lỗi để đưa ra cách khắc phục .

Trước tiên các bạn cần download Log4net tại link: http://logging.apache.org/log4net/download_log4net.cgi

Hoặc từ Nuget: https://www.nuget.org/packages/log4net/

Log4net cho phép chúng ta ghi log ra File hoặc log ra Database, tuy nhiên trong ví dụ này mình giới thiệu cách log ra File mình hay dùng khi triển khai hệ thống.

Sau khi download log4net.dll về chúng ta tiến hành add reference vào project để sử dụng.

Tiếp theo ta tiến hành tạo một class WriteLog.cs để có thể sử dụng lại ở nhiều nơi trong project của chúng ta.

using System;
using System.Web;

namespace TestLog4Net
{
    public class WriteLog
    {
        private static string PageName = HttpContext.Current.Handler.GetType().Name;
        private static log4net.ILog log = log4net.LogManager.GetLogger(PageName);

        public static void LogError(Exception ex)
        {
            log.Error(ex);
        }

        public static void LogWarning(Exception ex)
        {
            log.Warn(ex);
        }

        public static void LogInfo(Exception ex)
        {
            log.Info(ex);
        }

        public static void LogFatal(Exception ex)
        {
            log.Fatal(ex);
        }
    }
}

Trong file Global.asax ta cần khai báo như sau.

using System;
using System.Threading;

namespace TestLog4Net
{
    public class Global : System.Web.HttpApplication
    {
        protected void Application_Start(object sender, EventArgs e)
        {
            log4net.Config.XmlConfigurator.Configure();
        }
        protected void Application_Error(Object sender, EventArgs e)
        {
            Exception ex = Server.GetLastError();
            if (ex is ThreadAbortException)
                return;
            WriteLog.LogError(ex);
        }
    }
}

Log4net cần được đăng ký trong Application_Start để sử dụng. Ở sự kiện Application_Error ta gọi hàm common LogError ta của class WriteLog ở trên để tiến hành ghi log khi hệ thống xẩy ra lỗi ngoại lệ. Chúng ta cũng có thể ghi log ngay trong những hàm cụ thể nếu cần

protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                //do something here
            }
            catch (Exception ms)
            {
                WriteLog.LogError(ms);
            }
        }

Chúng ta cần thêm đoạn config sau vào file WebConfig

<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
  </configSections>
  <log4net>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="App_Data/log.txt" />
      <appendToFile value ="true" />
      <rollingStyle value="Size"/>
      <maximumFileSize value="1MB"/>
      <maxSizeRollBackup value ="10" />
      <staticLogFileSize value="true"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%newline ************* %date [%thread] %level %logger **************  %newline %message %newline% %exception"/>
			</layout>
    </appender>
    <root>
      <level value="ERROR"/>
      <appender-ref ref="RollingFileAppender"/>
    </root>
  </log4net>

Một số điểm chúng ta cần lưu ý:

  • <file value="App_Data/log.txt" /> là đường dẫn file log của chúng ta.
  • <maxSizeRollBackup value =”10″/> Ta sử dụng RollingFileAppender, nếu kích thước file vượt quá quy định thì nó sẽ đổi tên file cũ và ghi vào file mới. Tổng số file tối đa ở đây mình do mình config (ở đây là 10), các file cũ nhất sẽ bị xóa đi khi số lượng file vượt quá số lượng config (ở đây là 10)
  • <maximumFileSize value=”1MB”/> Kích thước tối đa của 1 file log (ở đây mình config là 1 Megabyte)
  • <conversionPattern value="... cho phép  ta tùy chính dữ liệu log hiển thị khi được ghi ra file text, để tham khảo chi tiết các patterns các bạn xem link từ codeproject cuối bài viết

Kết quả khi hệ thống có phát sinh lỗi ngoại lệ, trong folder App_Data ta sẽ có file log như sau :)

Các bạn có thể tham khảo thêm chi tiết tại link: https://www.codeproject.com/articles/140911/log4net-tutorial

Hoặc download code đầy đủ của ví dụ này dưới đây

Download Source

Related Post


Sử dụng google reCAPTCHA trong Asp.Net
Thursday, February 9, 2017
Đã lâu lắm rồi mới có thời gian ngồi viết lại blog, hôm nay mình chia sẻ cách sử dụng Google reCAPTCHA trong các project Asp.Net. Google reCAPTCHA là 1 dạng captcha mới và tiện dụng để chống spam, chống bot tự động đăng ký điền form và thực hiện trên form. Phiên bản mới của google recaptcha rất thân thiện với người dùng và độ bảo mật cao.
Drag & Drop upload multiple file với Asp.net C# & Dropzone.js
Saturday, July 9, 2016
Upload multiple file là một chức năng được dùng khá nhiều trong các project về website, trước đây mình cũng đã chia sẻ một ví dụ về upload multiple file với jquery & asp.net c#, nhưng cách đây ít hôm mình có tìm được thằng Dropzone.js hỗ trợ upload file có vẻ hay hơn nhiều, khi kết hợp với Asp.net C# và áp dụng vào project mình đang làm thực sự thấy nó đem lại hiệu quả rất ưng ý.
Search
Category

Blog Archive

Đăng ký nhận bài mới