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

Copyright @VardyTests.com