Log4net
Log4net là một công cụ giúp người lập trình ghi lại những thông tin trong lúc chạy ứng dụng. Trong trường hợp ứng dụng của bạn có lỗi mà vẫn không tìm được nguyên nhân, log4net có thể là vị cứu tinh để giúp bạn xác định nơi gây lỗi.
Ngoài ra, Log4net còn có thể thay đổi trạng thái log lúc chương trình chạy mà không cần ngừng chương trình. Bên cạnh đó, khi sử dụng log4net sẽ không ảnh hưởng đáng kể đến performance của ứng dụng, log4net còn được thiết kế với tính flexibility rất cao, chúng ta có thể mở rộng và thêm thắt những thứ mình muốn vào thư viện log4net, chẳng hạn như cách thức log, định dạng log, … Có rất nhiều cách để Appender, tuy nhiên ta quan tâm 2 cách hay dùng nhất là: +Log ra File (trong đó RollingFileAppender được dùng nhiều nhất) +Log ra Database (ở đây sử dụng MS SQL Server)
Trong bài viết này mình sẽ giới thiệu cách sử dụng Log4net bằng 2 cách trên, nhưng trước tiên mình sẽ làm 1 ví dụ console đơn giản sử dụng log4net. Viết log trong 1 chương trình console Các bước như sau: + Download log4net từ http://logging.apache.org/log4net/download.html (nên chọn bản mới nhất). + Mở visual studio và tạo một ứng dụng console + Thêm log4net.dll vào reference trong thư mục vừa tải về.( \bin\net\*\release\log4net.dll) + Viết hàm main như sau:
1
using
System;
2
using
System.Collections.Generic;
3
using
System.Linq;
4
using
System.Text;
5
using
log4net;
6
7
namespace
DemoLog4Net
8
{
9
class
Program
10
{
11
protected
static
readonly
ILog log = LogManager.GetLogger(typeof(Program));
12
static
void
Main(string[] args)
13
{
14
log4net.Config.BasicConfigurator.Configure();
15
log.Debug("Debug level");
16
log.Info("Info level");
17
log.Warn("Ware level");
18
log.Error("Error level");
19
log.Fatal("Fatal level");
20
Console.ReadLine();
21
}
22
}
23
}
Kết quả:
• Có 7 cấp độ log như hình bên dưới đây:
Ví dụ: Nếu bạn tạo 1 đối tượng logger và gán nó với cấp độ INFO. Nên khi bạn gọi phương thức sau:
1
Logger.Info("message");
2
Logger.Debug("message");
3
Logger.Warn("message");
1
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Web.config", Watch = true)]
- Cấu hình log4net trong web.config - Đăng ký log4net trong Application_Start() trong Global.asax
1
void
Application_Start(object
sender, EventArgs e)
2
{
3
log4net.Config.XmlConfigurator.Configure();
4
}
- Sử dụng: + Using namespace log4net ở những nơi bạn cần sử dụng + Tạo thuộc tính sau vào các lớp cần sử dụng
1
private
static
readonly
ILog log = LogManager.GetLogger(typeof(TênLớpCủaBạn).Name);
Hoặc cách tổng quát hơn là:
1
private
static
readonly
ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+ Tại những nới cần log thì thêm đoạn code sau
1
log.Info("log.Info");
2
log.Debug("log.Debug");
3
log.Error("log.Error");
Trường hợp 1: Log ra file Cấu hình trong web.config
1
<configSections>
2
<section
name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
3
</configSections>
4
<log4net>
5
<appender
name="RollingFileAppender"
type="log4net.Appender.RollingFileAppender">
6
<file
value="App_Data/log.txt"
/>
7
<appendToFile
value
="true"
/>
8
<rollingStyle
value="Size"/>
9
<maximumFileSize
value="1MB"/>
10
<maxSizeRollBackup
value
="10"
/>
11
<staticLogFileSize
value="true"/>
12
<layout
type="log4net.Layout.PatternLayout">
13
<conversionPattern
value="%-5p%d{yyyy-MM-dd hh:mm:ss} – %m%n">
14
</layout>
15
</appender>
16
<root>
17
<level
value="DEBUG"/>
18
<appender-ref
ref="RollingFileAppender"/>
19
</root>
20
</log4net>
Giải thích
i. <file value=”App_Data/log.txt” />
- Đường dẫn file ta ghi thông tin lỗi
ii. <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)
iii. <maximumFileSize value=”1MB”/> - Kích thước tối đa của 1 file log (ở đây mình config là 1 Megabyte)
iv. <layout></layout - Định dạng của thông tin log cần ghi ra file kèm theo một số thông tin, bạn có thể tùy biến sao cho thông tin dễ nhìn nhất, ở đây tôi config value=”%-5p%d{yyyy-MM-dd hh:mm:ss} – %m%n”>
Trường hợp 2: Log ra database (MS SQL Server) Cấu trúc bảng cần định nghĩa (tùy vào việc cần lưu cái gì mà mình định nghĩa bảng này sao cho hợp lý, tuy nhiên bảng sau chứa các thuộc tính cơ bản cho việc log.
1
CREATE
TABLE
tblLog (
2
[Id] [int] IDENTITY (1, 1) NOT
NULL,
3
[Date] [datetime] NOT
NULL,
4
[Thread] [varchar] (255) NOT
NULL,
5
[Level] [varchar] (50) NOT
NULL,
6
[Logger] [varchar] (255) NOT
NULL,
7
[Message] [varchar] (4000) NOT
NULL,
8
[Exception] [varchar] (2000) NULL
9
)
Cấu hình trong web.config
1
<configSections>
2
<section
name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
3
</configSections>
4
5
<log4net>
6
<appender
name="AdoNetAppender"
type="log4net.Appender.AdoNetAppender">
7
<bufferSize
value="1"
/>
8
<connectionType
value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
9
<connectionString
value="Data Source=.;Initial Catalog=Log4Net;Persist Security Info=True;User ID=sa;Password=xxxxxx"/>
10
<commandText
value="INSERT INTO tblLog ([Date],[Thread],[Level],[Logger],[Message],[Exception) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)"
/>
11
<parameter>
12
<parameterName
value="@log_date"
/>
13
<dbType
value="DateTime"
/>
14
<layout
type="log4net.Layout.RawTimeStampLayout"
/>
15
</parameter>
16
<parameter>
17
<parameterName
value="@thread"
/>
18
<dbType
value="String"
/>
19
<size
value="255"
/>
20
<layout
type="log4net.Layout.PatternLayout">
21
<conversionPattern
value="%thread"
/>
22
</layout>
23
</parameter>
24
<parameter>
25
<parameterName
value="@log_level"
/>
26
<dbType
value="String"
/>
27
<size
value="50"
/>
28
<layout
type="log4net.Layout.PatternLayout">
29
<conversionPattern
value="%level"
/>
30
</layout>
31
</parameter>
32
<parameter>
33
<parameterName
value="@logger"
/>
34
<dbType
value="String"
/>
35
<size
value="255"
/>
36
<layout
type="log4net.Layout.PatternLayout">
37
<conversionPattern
value="%logger"
/>
38
</layout>
39
</parameter>
40
<parameter>
41
<parameterName
value="@message"
/>
42
<dbType
value="String"
/>
43
<size
value="4000"
/>
44
<layout
type="log4net.Layout.PatternLayout">
45
<conversionPattern
value="%message"
/>
46
</layout>
47
</parameter>
48
<parameter>
49
<parameterName
value="@exception"
/>
50
<dbType
value="String"
/>
51
<size
value="2000"
/>
52
<layout
type="log4net.Layout.ExceptionLayout"
/>
53
</parameter>
54
</appender>
55
<root>
56
<level
value="DEBUG"/>
57
<appender-ref
ref="AdoNetAppender"/>
58
</root>
59
</log4net>
Giải thích i. <bufferSize value=”1″/> - Log vào Database theo từng batch, nếu test thì ta nên để giá trị = 1 vì nếu để 100 thì phải có 100 lỗi ,nó mới log 1 lần dẫn đến nhầm lẫn tưởng là log không chạy.
ii. <connectionType> - Kết nối tới loại csdl cần lưu trữ (SQL Server hoặc Oracle, MySql)
iii. <connectionString> - Chuỗi kết nối tới csdl bạn cần lưu thông tin log - Nếu trong web.config của bạn đã có connectionString rồi thì ta chỉ cần gán tên của nó tại đây: <connectionStringName value=” ” />
iv. <commandText></ commandText> - Câu lệnh hoặc stored procedure dùng cho việc insert tới Database
v. <parameter></parameter>
- Tham số cung cấp cho câu lệnh hoặc stored procedure insert, chứa tên, loại dữ liệu, định dạng thông tin cần log.
vi. <root></root> - Thiết lập level Lưu ý: Đối với trường hợp là winform application cũng có cách làm gần tương tự, thay vì config trong web.config thì mình sẽ phải config trong App.config. Link tham khảo: http://logging.apache.org/log4net/release/config-examples.html http://www.codeproject.com/Articles/140911/log4net-Tutorial
Last updated