Hiển thị các bài đăng có nhãn Log4Net. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Log4Net. Hiển thị tất cả bài đăng

Thứ Năm, 28 tháng 2, 2008

Cấu hình Log4net như thế nào (Phần 1)?

Bài viết này trình bày các cấu hình ví dụ cho việc xây dựng trong appenders. Các cấu hình được thiết kế để làm việc với các log4net.Config.DOMConfigurator và log4net.Repository.Hierarchy.Hierarchy này.

Những ví dụ này không có nghĩa là cấu hình đầy đủ cho các appenders. Đối với một danh sách đầy đủ các thông số có thể thể chỉ định cho từng appender và chi tiết hơn trên mỗi tùy chọn xem tài liệu SDK cho appender này.

AdoNetAppender :

Để biết chi tiết đầy đủ xem tham khảo SDK mục: log4net.Appender.AdoNetAppender.

Những cấu hình của AdoNetAppender phụ thuộc vào nhà cung cấp lựa chọn cho các cơ sở dữ liệu mục tiêu. Dưới đây là một số ví dụ.

MS SQL Server :
Ví dụ sau đây cho thấy làm thế nào với cấu hình các AdoNetAppender để log tin nhắn với một cơ sở dữ liệu SQL Server. Những sự kiện được viết bằng lô 100 (BufferSize). ConnectionType quy định cụ thể tên kiểu đủ điều kiện cho các System.Data.IDbConnection sử dụng để kết nối với cơ sở dữ liệu. ConnectionString là cơ sở dữ liệu nhà cung cấp cụ thể. CommandText là cả một tuyên bố đã chế biến hoặc thủ tục lưu trữ, trong trường hợp này nó có một prepared statement. Mỗi tham số lập báo cáo hoặc thủ tục lưu trữ được chỉ định bằng tên nó, kiểu cơ sở dữ liệu và cách bố trí mà renders giá trị cho tham số.

Định nghĩa bảng cơ sở dữ liệu có:

CREATE TABLE [dbo].[Log] (
     [Id] [int] IDENTITY (1, 1) NOT NULL,
     [Date] [datetime] NOT NULL,
     [Thread] [varchar] (255) NOT NULL,
     [Level] [varchar] (50) NOT NULL,
     [Logger] [varchar] (255) NOT NULL,
     [Message] [varchar] (4000) NOT NULL,
     [Exception] [varchar] (2000) NULL
)

Những cấu hình appender có:

  
      
      
      
      
         
         
         
      
      
         
         
         
         
             
         
     
     
         
         
         
         
                
          
      
      
             
             
             
             
                   
             
      
      
             
             
             
             
                  
             
       
       
              
              
              
              
        

DangTrung,

Làm Thế Nào Config Log4Net Trong C#

Log4net là gì?

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. Nó chính là một phiên bản chuyển thể từ log4j và vẫn tiếp tục được phát triển kể từ năm 2001. 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,

Sử dụng như thế nào?

Trong bài viết này, tôi sẽ giới thiệu cách sử dụng log4net cho một window application và cách config cho log4net ghi thông tin log ra file bằng một file config. Thực ra đối với web application thì cách sử dụng hoàn toàn tương tự. Chỉ có một số trường hợp file log của bạn không sinh ra được vì không đủ quyền. Như các bạn biết thì Web application chạy dưới 1 process bằng quyền của user ASPNET trong Windows, dó đó nếu user này không đủ quyền ghi file vào folder web của bạn thì file log tương ứng cũng có thể không được tạo ra.

Hãy download version mới nhất của log4net từ website apache. và add reference vào project của bạn như hình sau :

Sau khi bạn đã reference Log4net vào project của mình hoàn chỉnh, các bước còn lại bạn tiếp tục config để project của bạn hiểu Log4Net ở đâu. Để project hiểu bạn cần config code mỗi khi project gọi Log4Net, như vậy thì rất dài dòng và phức tạp vì phải gọi đi gọi lại nhiều lần. Cách đơn giản hãy tạo một class dùng chung và bạn có thể gọi bất cứ đâu mà bạn muốn :

public static class LogService
{
      #region Members
      private static readonly ILog logger = LogManager.GetLogger(typeof(LogService));
     #endregion

      #region Constructors
      static LogService()
     {
          BasicConfigurator.Configure();
          XmlConfigurator.Configure();
     }
     #endregion

     #region Methods

     ///
     ///
     ///
     ///
    ///
    ///
    public static void WriteLog(LogLevel logLevel, String log)
    {
         if (logLevel.Equals(LogLevel.DEBUG))
             logger.Debug(log);
        else if (logLevel.Equals(LogLevel.ERROR))
            logger.Error(log);
        else if (logLevel.Equals(LogLevel.FATAL))
            logger.Fatal(log);
        else if (logLevel.Equals(LogLevel.INFO))
            logger.Info(log);
        else if (logLevel.Equals(LogLevel.WARN))
            logger.Warn(log);
    }
    #endregion
}

Bây giờ chúng ta đã có class dùng chung trong project của bạn, câu hỏi ở đây là chúng ta sẽ gọi chúng như thế nào? và còn config nào nữa ?. Câu trả lời cho các bạn là còn rất nhiều bạn cứ từ từ và xem tiếp theo. Trước tiên bạn xem project của bạn thuộc một thể loại nào Application hay Web, không sao dù là project nào thì đều có file config riêng cho nó.
  • Application thì ta có App.config
  • Web thì ta có Web.config.
Bạn hãy thêm config này vào trong config file của bạn :


Trong file cấu hình này, tôi sử dụng RollingFileAppender. Có rất nhiều loại Appender được xây dựng sẵn trong thư viện log4net. Mỗi loại sẽ có công dụng ghi nội dung log vào một nơi khác nhau. Trong đó RollingFileAppender là được sử dụng nhiều nhất và cũng dễ sử dụng nhất. Tôi sẽ giải thích những gì tôi nghĩ là khó hiểu nhất


Thông tin log của chúng ta sẽ được ghi vào file Log4netSampleLog.txt, file này sẽ nằm ở thư mục chạy của ứng dụng, cùng cấp với file exe và file .config của chúng ta. Nếu muốn nó lưu file vào chỗ khác chúng ta có thể hardcode đường dẫn ở đây.


Dữ liệu log sẽ được ghi vào file, vì ta đang sử dụng là RollingFileAppender, nên khi kích thước file vượt quá một mức nào đó thì nó sẽ đổi tên file cũ và ghi vào file mới. Tổng số lượng file tối đa sẽ là 10 và những file cũ nhất sẽ bị xóa nếu số lượng file vượt quá 3.


Kích thước file log tối đa sẽ là 1MB.

Layout:

Đây là phần khá thú vị, những text log mà chúng ta ghi ra sẽ kèm thêm một số thông tin theo như phần định dạng trong layout như ngày tháng, threadId, className, ... Các bạn có thể tùy biến phần layout này để được log output dễ nhìn nhất.


Level:

Level mặc định sẽ là Debug cho mọi nơi có sử dụng log trong chương trình của bạn. Nghĩa là nếu bạn khai báo như hình, thì mọi chỗ bạn log đều được ghi xuống file vì level DEBUG là level thấp nhất, nhưng nếu chỗ này bạn để là ERROR thì chỉ có những log với level cao hơn hoặc bằng ERROR mới được ghi xuống file. Khi deploy chương trình cho khách hàng, thường thì chúng ta sẽ để level default là ERROR, khi sử dụng có lỗi ta sẽ yêu cầu khách hàng sử lại thành DEBUG nếu cần thiết.


- Thông thường người ta sử dụng full name của class (kèm theo đầy đủ namespace) để dùng như loggerName. Cách dùng này rất hợp lý vì chúng ta sẽ biết đoạn log của mình sinh ra từ class.nào. Để ghi Log bạn cần phải xác định rằng bạn ghi cái gì và ghi như thế nào?

Để ghi thông tin bạn làm như sau :

Để ghi lỗi bạn làm như sau :


Còn nhiều và nhiều cách config cho Log4Net bạn có thể tham khao các cách config tại trang wen của nó.

Chúc bạn thành công.
Dang Trung.

Thứ Tư, 27 tháng 2, 2008

Tìm hiểu về log4net



log4net là một công cụ để giúp đỡ các lập trình ghi lại báo cáo và xuất ra một loạt các mục tiêu. Khi có vấn đề với các ứng dụng, nó thật sự hữu ích có thể tìm ra vấn đế một cách chính xác. Với log4net có thể để cho phép đăng nhập tại thời gian chạy mà không sửa đổi các ứng dụng hệ nhị phân. Những gói log4net được thiết kế để báo cáo bản ghi có thể vẫn còn trong mã shipped mà không bị một chi phí hoạt động cao.

Một trong những tính năng đặc biệt trong log4net là khái niệm trong phân cấp logger. Sử dụng những logger có thể kiểm soát trong đó báo cáo có chọn lọc log file xuất theo tùy ý.

log4net được thiết kế với hai mục tiêu riêng biệt ghi nhớ: tốc độ và tính linh hoạt

Tính Năng :
  • Hỗ trợ cho nhiều framework
  • Đầu ra cho nhiều mục tiêu ghi
  • Phân cấp kiến trúc ghi
  • Cấu hình XML
  • Dynamic Configuration
  • Bối cảnh Logging
  • Cung cấp khả năng kiến trúc
  • Modular và thiết kế mở rộng
  • Hiệu suất cao với sự linh hoạt

Hỗ trợ cho nhiều framework :
log4net chạy trên tất cả tương thích runtimes CLI ECMA 1,0. log4net có cụ thể bản xây dựng cho các framework sau đây:
  • Microsoft .NET Framework 1.0 (1.0.3705)
  • Microsoft .NET Framework 1.1 (1.1.4322)
  • Microsoft .NET Framework 2.0 (2.0.50727)
  • Microsoft .NET Compact Framework 1.0
  • Mono 1.0
  • Mono 2.0
  • Microsoft Shared Source CLI 1.0
  • CLI 1.0 Compatible

Lưu ý:. Do sự hỗ trợ framework NET cho log4net tương thích ngược sẽ chạy trên phiên bản tương lai của runtimes được liệt kê ở trên.

Đầu ra cho nhiều mục tiêu ghi :
  • log4net.Appender.AdoNetAppender : ghi sự kiện vào cơ sở dữ liệu bằng cách sử dụng prepared statements hoặc stored procedures.
  • log4net.Appender.AnsiColorTerminalAppender : Writes color highlighted logging events to a an ANSI terminal window.
  • log4net.Appender.AspNetTraceAppender Writes logging events to the ASP trace context. These can then be rendered at the end of the ASP page or on the ASP trace page.
  • log4net.Appender.ColoredConsoleAppender Writes color highlighted logging events to the application's Windows Console.
  • log4net.Appender.ConsoleAppender Writes logging events to the application's Console. The events may go to either the standard our stream or the standard error stream.
  • log4net.Appender.EventLogAppender Writes logging events to the Windows Event Log.
  • log4net.Appender.FileAppender Writes logging events to a file in the file system.
  • log4net.Appender.LocalSyslogAppender Writes logging events to the local syslog service (UNIX only).
  • log4net.Appender.MemoryAppender Stores logging events in an in memory buffer.
  • log4net.Appender.NetSendAppender Writes logging events to the Windows Messenger service. These messages are displayed in a dialog on a users terminal.
  • log4net.Appender.OutputDebugStringAppender Writes logging events to the debugger. If the application has no debugger, the system debugger displays the string. If the application has no debugger and the system debugger is not active, the message is ignored.
  • log4net.Appender.RemoteSyslogAppender Writes logging events to a remote syslog service using UDP networking.
  • log4net.Appender.RemotingAppender Writes logging events to a remoting sink using .NET remoting.
  • log4net.Appender.RollingFileAppender Writes logging events to a file in the file system. The RollingFileAppender can be configured to log to multiple files based upon date or file size constraints.
  • log4net.Appender.SmtpAppender Sends logging events to an email address.
  • log4net.Appender.TelnetAppender Clients connect via Telnet to receive logging events.
  • log4net.Appender.TraceAppender Writes logging events to the .NET trace system.
  • log4net.Appender.UdpAppender Sends logging events as connectionless UDP datagrams to a remote host or a multicast group using a UdpClient.

phân cấp kiến trúc ghi :
phân cấp ghi là một phù hợp lý tưởng với phát triển dựa trên các thành phần. Mỗi thành phần có trong logger riêng của mình. Khi cá nhân được thử nghiệm, các tính chất trong các logger có thể thiết lập như là phát triển các yêu cầu. Khi kết hợp với các thành phần khác, các logger kế thừa các thuộc tính xác định bởi integrator trong các thành phần. Một lựa chọn có thể nâng cao các ưu tiên ghi vào một thành phần mà không ảnh hưởng đến các thành phần khác. Điều này rất hữu ích khi bạn cần một chi tiết theo dõi từ một thành phần chỉ duy nhất mà không lấn át các theo dõi tập tin với những thông điệp từ các thành phần khác. Tất cả điều này có thể thể thực hiện qua các các file cấu hình, không thay đổi mã là cần thiết.

Cấu hình XML :
log4net có cấu hình bằng cách sử dụng một tập tin cấu hình XML. Những thông tin cấu hình có thể thể nhúng vào trong file cấu hình XML khác (chẳng hạn như tập tin cấu hình của ứng dụng.) hoặc trong một file riêng biệt. Các cấu hình là dễ đọc và dễ updateable trong khi giữ lại sự linh hoạt để thể hiện tất cả các cấu hình. Ngoài ra log4net có thể được cấu hình lập trình.

Dynamic Configuration :
log4net có thể theo dõi file cấu hình cho những thay đổi và tự động áp dụng thay đổi của cấu hình này. Mức ghi, appenders, bố trí, và chỉ là về mọi thứ khác có thể điều chỉnh trong thời gian chạy. Trong nhiều trường hợp, có thể chẩn đoán các vấn đề ứng dụng mà không chấm dứt quá trình được đề cập. Điều này có thể một công cụ rất có giá trị trong việc điều tra các vấn đề với các ứng dụng triển khai.

Bối cảnh Logging :
log4net có thể dùng cho thu thập dữ liệu ghi nội dung một cách rằng có minh bạch cho các nhà phát triển tại các điểm ghi. Những GlobalContext và ThreadContext cho phép các ứng dụng với lưu trữ dữ liệu theo ngữ cảnh được gắn cho thông điệp ghi. Ví dụ, trong một dịch vụ web, một khi người gọi có xác thực tên người dùng trong người gọi có thể lưu trữ trong một sở hữu ThreadContext. Sở hữu này sau đó sẽ thể tự động lưu lại như là một phần trong mỗi tin nhắn ghi tiếp theo được làm từ các chủ đề tương tự.

...
DangTrung