Thực Hành Log4net
Bài tập 1:
1/. Truy cập trang />
Download Log4net 2.0.8, giải nén file log4net-2.0.8-bin-newkey.zip ra đĩa C: hoặc D:, …
2/. Tạo 1 Console Project
3/. Thực hiện Add Reference vào Project (RC tại Project, chọn Add Reference…)
Kết quả như hình sau:
Hoặc có thể chọn TOOLS \ NuGet Package Manager \ Manager NuGet Packages for Solution ..
Chọn Install để cài đặt.
4/. Mở AssemblyInfo.cs, thêm dòng lệnh sau:
[assembly: log4net.Config.XmlConfigurator(Watch=true)]
5/. Mở App.config
Thêm thẻ: (làm thẻ đầu tiên, nếu không sẽ bị lỗi đọc file config)
<configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler" />
</configSections>
Tiếp theo thêm các thẻ khác sau thẻ <startup> như sau:
<log4net debug="true">
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="G:/logcuatoi.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="2MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %level %logger - %message %newline"/>
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="RollingLogFileAppender" />
</root>
</log4net>
6/. Tạo Program.cs như sau:
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
log4net;
//thêm dòng khai báo 1
log4net.Config; //thêm dòng khai báo 2
namespace ConsoleApplication1
{
class Program
{
//thêm dòng lệnh này để tạo logger
private static readonly ILog _logger =
LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
static void Main(string[] args)
{
//viết các lệnh trong Main
_logger.Info("Bat dau chuong trinh:");
try
{
string s = "abc";
int i = int.Parse(s);
}
catch (Exception ex)
{
_logger.Debug(ex);
}
_logger.Info("Ket thuc chuong trinh./.");
}
}
}
Dịch và chạy chương trình. Hãy xem file logcuatoi.txt:
Bài tập 2:
1/. Download Log4net, giải nén ra ổ đĩa ,…. (tương tự Bài tập 1)
2/. Tạo 1 Windows Form Application Project
3/. Thực hiện Add Reference vào Propject như sau: (tương tự Bài tập 1)
Right click tại References, chọn Add Reference …
4/. Mở AssemblyInfo.cs, thêm dòng lệnh sau:
[assembly: log4net.Config.XmlConfigurator(Watch=true)]
5/. Mở App.config
Thêm thẻ:
<configSections> … </configSections> // làm thẻ đầu tiên, nếu không sẽ bị lỗi đọc file config.
<configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler" />
</configSections>
Tiếp theo thêm các thẻ khác sau thẻ <startup> như sau:
<log4net debug="true">
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="E:\Mylog.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="2MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %level %logger-%message %exception %newline"/>
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="RollingLogFileAppender" />
</root>
</log4net>
6/. Tạo Program.cs như sau:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using log4net;
//thêm dòng khai báo 1
using log4net.Config;
//thêm dòng khai báo 2
namespace Log_2
{
static class Program
{
//
private static readonly ILog _logger =
LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
_logger.Info("Bat dau chuong trinh:");
Application.Run(new Form1());
}
}
}
7/. Tạo Form 1 như sau:
Có 3 Label, 3 Text box (T1, T2, TKQ) , 6 Button.
Viết Code cho Form và các Button như sau :
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;
using log4net;
//thêm dòng khai báo 1
using log4net.Config;
//thêm dòng khai báo 2
namespace Log_2
{
public partial class Form1 : Form
{
//thêm dòng lệnh này để tạo logger
private static readonly ILog _logger =
LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
//Khai báo các biến
public double SO1;
public double SO2;
public double KQ;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{ //Nút Cộng
_logger.Debug("Thuc hien phep cong");
SO1 = Convert.ToDouble(T1.Text);
SO2 = Convert.ToDouble(T2.Text);
KQ = SO1 + SO2;
TKQ.Text = Convert.ToString(KQ);
}
private void button2_Click(object sender, EventArgs e)
{ //Nút Trừ
_logger.Debug("Thuc hien phep tru");
SO1 = Convert.ToDouble(T1.Text);
SO2 = Convert.ToDouble(T2.Text);
KQ = SO1 - SO2;
TKQ.Text = Convert.ToString(KQ);
}
private void button3_Click(object sender, EventArgs e)
{
//Nút nhân
_logger.Debug("Thuc hien phep nhan");
try
{
SO1 = Convert.ToDouble(T1.Text);
SO2 = Convert.ToDouble(T2.Text);
KQ = SO1 * SO2;
TKQ.Text = Convert.ToString(KQ);
}
catch (Exception ex)
{
_logger.Error("Xay ra loi: "+ex);
}
}
private void button4_Click(object sender, EventArgs e)
{
//Nút Chia
_logger.Debug("Thuc hien phep chia");
try
{
SO1 = Convert.ToDouble(T1.Text);
SO2 = Convert.ToDouble(T2.Text);
KQ = SO1 / SO2;
TKQ.Text = Convert.ToString(KQ);
}
catch (Exception ex)
{
_logger.Error("Xay ra loi: "+ ex);
}
}
private void button6_Click(object sender, EventArgs e)
{
T1.Text = "";
T2.Text = "";
TKQ.Text = "";
T1.Focus();
}
}
}
private void button7_Click(object sender, EventArgs e)
{
_logger.Info("Ket thuc chuong trinh./.");
Application.Exit();
}
Dịch và chạy chương trình. Hãy xem file Mylog.txt: (sinh viên tìm hiểu …?)
1/. Log4net:
LOG4NET là một thư viện mã nguồn mở cho phép ta có thể tạo ra một hoặc nhiều tập tin nhật ký (log) ghi
nhận quá trình chương trình ‘chạy’. Khi sử dụng log4net sẽ khơng ảnh hưởng gì đến việc thực hiện của ứng
dụng và điều quan trọng là người bảo trì có thể theo dõi sự hoạt động của ứng dụng. Log4net cho phép sử dụng
trong cả Java.
2/. Cấu hình Log4net: mọi cấu hình được thực hiện theo dữ liệu XML
Được thực hiện trong tập tin cấu hình: App.config cho Window Form hoặc Web.config cho Asp.NET.
Thẻ <configuration> …</configuration>: là thẻ lớn nhất chứa nội dung cấu hình.
Thẻ <configSections>…</configSections> :
Thẻ <root> …</root> : dùng qui định mức log và tham chiếu Appender.
Trong thư viện Apache log4net có cung cấp sẵn 7 mức (level) ghi log cho ứng dụng đó là : OFF,
FATAL, ERROR, WARN, INFO, DEBUG, ALL với ý nghĩa như sau:
Ưu
tiên
1
2
3
4
5
6
7
Loại log
OFF
FATAL
ERROR
WARN
INFO
DEBUG
ALL
Ghi chú
Khơng ghi gì cả
Ghi nhận log loại Fatal (nghiêm trọng)
Ghi nhận các log loại Fatal, Error
Ghi nhận các log loại Fatal, Error, Warning
Ghi nhận các log loại Fatal, Error, Warning, Info
Ghi nhận các loại Fatal, Error, Warning, Info, debug (mặc định là Debug)
Ghi nhận tất cả các loại log
Ví dụ :
<root>
<level value="INFO"/>
<appender-ref ref="FileAppender"/>
<appender-ref ref="ConsoleAppender" />
</root>
Thẻ <appender> …</appender>: Thẻ này quy định cách thức lưu trữ log, trong đó có 4 cách cơ bản
thể hiện:
+ ConsoleAppender: ghi log ra cửa sổ lệnh.
Ví dụ:
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
</layout>
<filter type="log4net.Filter.StringMatchFilter">
<stringToMatch value="test" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
+ FileAppender: ghi log vào tập tin văn bản (file text)
Ví dụ:
<appender name="FileAppender" type="log4net.Appender.FileAppender">
Path:\mylogfile.txt
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %logger - %message%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="INFO" />
<levelMax value="FATAL" />
</filter>
</appender>
+ RollingFileAppender: ghi log vào tập tin văn bản một cách tuần hoàn, các tập tin là mylogfile.txt.1,
mylogfile.txt.2, …, mylogfile.txt.5, khi tập tin đạt kích thước 10MB, hỗ trợ ghi file theo ngày tháng,
kích thước.
Ví dụ:
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="path:\mylogfile.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %logger - %message%newline" />
</layout>
</appender>
+ AdoNetAppender: ghi log vào tập tin cơ sở dữ liệu và phải tạo trước CSDL và bảng ghi dữ liệu (tùy
thuộc hệ quản trị CSDL cụ thể, sinh viên tham khảo />Ví dụ: dùng cho MS SQL Server
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="100" />