NEWS

[C#] Hướng dẫn sử dụng thư viện NLog để ghi lại nhật ký phần mềm ứng dụng

[C#] Hướng dẫn sử dụng thư viện NLog để ghi lại nhật ký phần mềm ứng dụng
Đăng bởi: Thảo Meo - Lượt xem: 11324 15:19:12, 09/05/2019C#   In bài viết

Xin chào các bạn, bài viết hôm nay mình sẽ tiếp tục hướng dẫn các bạn các sử dụng thư viện NLog C# để ghi lại nhật ký cho ứng dụng, khi chạy phần mềm.

[C#] Sử dụng NLog để ghi lại nhật ký phần mềm ứng dụng

Thường các bạn dễ thấy, phần mềm nào cũng thường có một file log kèm theo để giúp người dùng dễ dàng theo dõi những nhật ký lỗi phần mềm...

Trong C# với NLog sẽ giúp chúng ta thực hiện công việc ghi nhật ký lại một cách dễ dàng.

Giới đây là hình ảnh file log khi chạy phần mềm ứng dụng chúng ta ghi lại:

 

NLog là một thư viện trên nền tảng .NET và là mã nguồn mở giúp bạn có thể thêm những đoạn mã lần vết phức tạp để đáp ứng các yêu cầu trên và giải quyết được nhiều yêu cầu lần vết phức tạp khác. NLog giúp bạn định nghĩa ra các quy tắc (rule) điều khiển các vết chuẩn đoán lỗi từ các nguồn (source) trong ứng dụng đến các đích (target) cần lưu vết để xem như:

  1. tệp nhật ký (log) dạng văn bản ASCII
  2. màn hình điều khiển (console)
  3. dạng nội dung thư điện tử
  4. lưu vào CSDL
  5. gửi tới một máy tính khác trên mạng theo giao thức TCP/IP
  6. hàng đợi thông  báo MSMQ
  7. Nhật ký sự kiện của hệ điều hành Window (Event Log)
  8. và nhiều đích khác nữa

Thêm nữa nội dung nhật ký (vết) có thể được tham số hóa như là những thành phần của thông tin có tính ngữ cảnh, để gửi tới các địch (target). Các thành phần ngữ cảnh sau sẽ được hỗ trợ:

  1. Thời gian (ngày – giờ)
  2. Mức độ
  3. Tên nguồn
  4. Thông tin về thủ tục gửi nội dung nhật ký (mức method của lớp)
  5. Giá trị môi trường khi chạy ứng dụng
  6. Thông tin về các ngoại lệ (exception)
  7. Tên máy, tiến trình (process) và luồng (thread)

Nội dung nhật ký cần phải gắn với mức độ / log level để xác định và phân loại. Các mức độ nhật ký/vết sau được hỗ trợ:

  1. Trace:Vết thông tin với nội dung rất chi tiết để chuẩn đoán, thường là về mặt nghiệp vụ
  2. Debug: Thông tin gỡ rỗi kỹ thuật
  3. Info: Thông tin thông báo
  4. Warn: Thông tin cảnh báo
  5. Error: Thông tin khi xảy lỗi ứng dụng
  6. Fatal:Lỗi nghiêm trọng

Đầu tiên các bạn cần cài đặt thư viện NLog từ Nuget về:

từ giao diện Nuget Package command các bạn gõ vào dòng lệnh sau:

PM> Install-Package NLog -Version 4.6.3
PM> Install-Package NLog.Config -Version 4.6.3

Sau khi cài đặt hai thư viện này xong.

Các bạn mở file Nlog.conifg với nội dung như sau:

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      
      throwExceptions="false"
      internalLogLevel="Off" internalLogFile="c:	emp
log-internal.log">

  <!--
  See https://github.com/nlog/nlog/wiki/Configuration-file
  for information on customizing logging rules and outputs.
   -->


  <targets>
 
    <!-- local file target -->
    <target name="fileTarget"
              xsi:type="File"
             encoding="utf-8"
              fileName="C:logsexample.log"
              layout="
-------------- ${level} (${longdate}) --------------${newline}
${newline}
Call Site: ${callsite}${newline}
Exception Type: ${exception:format=Type}${newline}
Exception Message: ${exception:format=Message}${newline}
Stack Trace: ${exception:format=StackTrace}${newline}
Additional Info: ${message}${newline}" />
  </targets>


  <rules>
    <!-- local file logger -->
    <logger minlevel="Trace" name="fileLogger" writeTo="fileTarget"/>
    
  </rules>
</nlog>

Và ứng dụng vào windows form:

Trong form này, mình sẽ viết một ứng dụng là lấy số nguyên chia cho số 0, thì mặc định nó sẽ bị lỗi chia cho 0.

Khi nó bị lỗi sẽ rớt vào hàm catch trong try catch và mình ghi log lại:

Source code C# form 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace NLog
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                int zero = 0;
                int result = 5 / zero;
            }
            catch (DivideByZeroException ex)
            {                
                Logger logger = LogManager.GetLogger("fileLogger");
                
                logger.Error(ex, $"Lỗi 5 không chia được cho 0!");

                logger.Warn(ex, "https://laptrinhvb.net");

                logger.Info(ex, $"Thực hiện phép chia!");

                logger.Debug(ex, $"Kết quả Debug!");
            }
        }
    }
}

 

=> Kết quả file log ghi lại cho chúng ta

 -------------- Error (2019-05-09 15:03:24.3230) --------------
 
 Call Site: NLog.Form1.button1_Click
 Exception Type: System.DivideByZeroException
 Exception Message: Attempted to divide by zero.
 Stack Trace:    at NLog.Form1.button1_Click(Object sender, EventArgs e) in C:Users
guyenthaoDesktopNLogNLogForm1.cs:line 25
 Additional Info: Lỗi 5 không chia được cho 0!

 -------------- Warn (2019-05-09 15:03:24.3580) --------------
 
 Call Site: NLog.Form1.button1_Click
 Exception Type: System.DivideByZeroException
 Exception Message: Attempted to divide by zero.
 Stack Trace:    at NLog.Form1.button1_Click(Object sender, EventArgs e) in C:Users
guyenthaoDesktopNLogNLogForm1.cs:line 25
 Additional Info: https://laptrinhvb.net

 -------------- Info (2019-05-09 15:03:24.3580) --------------
 
 Call Site: NLog.Form1.button1_Click
 Exception Type: System.DivideByZeroException
 Exception Message: Attempted to divide by zero.
 Stack Trace:    at NLog.Form1.button1_Click(Object sender, EventArgs e) in C:Users
guyenthaoDesktopNLogNLogForm1.cs:line 25
 Additional Info: Thực hiện phép chia!

 -------------- Debug (2019-05-09 15:03:24.3580) --------------
 
 Call Site: NLog.Form1.button1_Click
 Exception Type: System.DivideByZeroException
 Exception Message: Attempted to divide by zero.
 Stack Trace:    at NLog.Form1.button1_Click(Object sender, EventArgs e) in C:Users
guyenthaoDesktopNLogNLogForm1.cs:line 25
 Additional Info: Kết quả Debug!

Thanks for watching!

THÔNG TIN TÁC GIẢ

BÀI VIẾT LIÊN QUAN

[C#] Hướng dẫn sử dụng thư viện NLog để ghi lại nhật ký phần mềm ứng dụng
Đăng bởi: Thảo Meo - Lượt xem: 11324 15:19:12, 09/05/2019C#   In bài viết

CÁC BÀI CÙNG CHỦ ĐỀ

Đọc tiếp
.