- [C#] Cách Sử Dụng DeviceId trong C# Để Tạo Khóa Cho Ứng Dụng
- [SQLSERVER] Loại bỏ Restricted User trên database MSSQL
- [C#] Hướng dẫn tạo mã QRcode Style trên winform
- [C#] Hướng dẫn sử dụng temp mail service api trên winform
- [C#] Hướng dẫn tạo mã thanh toán VietQR Pay không sử dụng API trên winform
- [C#] Hướng Dẫn Tạo Windows Service Đơn Giản Bằng Topshelf
- [C#] Chia sẻ source code đọc dữ liệu từ Google Sheet trên winform
- [C#] Chia sẻ source code tạo mã QR MOMO đa năng Winform
- [C#] Chia sẻ source code phần mềm lên lịch tự động chạy ứng dụng Scheduler Task Winform
- [Phần mềm] Tải và cài đặt phần mềm Sublime Text 4180 full version
- [C#] Hướng dẫn download file từ Minio Server Winform
- [C#] Hướng dẫn đăng nhập zalo login sử dụng API v4 trên winform
- [SOFTWARE] Phần mềm gởi tin nhắn Zalo Marketing Pro giá rẻ mềm nhất thị trường
- [C#] Việt hóa Text Button trên MessageBox Dialog Winform
- [DEVEXPRESS] Chia sẻ code các tạo report in nhiều hóa đơn trên XtraReport C#
- [POWER AUTOMATE] Hướng dẫn gởi tin nhắn zalo từ file Excel - No code
- [C#] Chia sẻ code lock và unlock user trong domain Window
- [DEVEXPRESS] Vẽ Biểu Đồ Stock Chứng Khoán - Công Cụ Thiết Yếu Cho Nhà Đầu Tư trên Winform
- [C#] Hướng dẫn bảo mật ứng dụng 2FA (Multi-factor Authentication) trên Winform
- [C#] Hướng dẫn convert HTML code sang PDF File trên NetCore 7 Winform
[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
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ư:
- tệp nhật ký (log) dạng văn bản ASCII
- màn hình điều khiển (console)
- dạng nội dung thư điện tử
- lưu vào CSDL
- gửi tới một máy tính khác trên mạng theo giao thức TCP/IP
- hàng đợi thông báo MSMQ
- Nhật ký sự kiện của hệ điều hành Window (Event Log)
- 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ợ:
- Thời gian (ngày – giờ)
- Mức độ
- Tên nguồn
- Thông tin về thủ tục gửi nội dung nhật ký (mức method của lớp)
- Giá trị môi trường khi chạy ứng dụng
- Thông tin về các ngoại lệ (exception)
- 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ợ:
- 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ụ
- Debug: Thông tin gỡ rỗi kỹ thuật
- Info: Thông tin thông báo
- Warn: Thông tin cảnh báo
- Error: Thông tin khi xảy lỗi ứng dụng
- 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!