Logging Application Block (Enterprise Library 5.0) With C#

Logging is a very important feature for many applications and serves the very critical purpose in a software application's life. Logging enables looking for monitoring data and also documents what is happening inside and outside of the application; also known as auditing.

The most common places to log such activities, information and data are:

  1. Flat files (.log/.txt)
  2. Event logs (Windows event viewer) and
  3. Database.

In the absence of a Logging Application Block, the logging code needs to be repeated in the application in many places. This code will also include .NET library and function calls based on the type of place you want to log the information. Hence, a Logging Application Block simply de-couples the logging functionality from the application code.

Configuring the Logging Application Block

1. Open your Visual Studio project; if an app.config file is not already available, then add it
2. Open Microsoft Enterprise Library console.
3. In the Blocks menu, choose the "Add Logging Settings" option, this will appear as shown here:

Image1.jpg

4. Based on your requirements add listeners (File, Event, Database etc.).

Image2.jpg

5. Describe "Event Log" target listener:

Image3.jpg

6. Describe "Flat File" trace listener:

Image4.jpg

7. Describe "Message Formatter":

Image5.jpg

Now save this configuration by clicking File --> Save option and choose the .config file you added.

This will be modified and will appear as shown here.

Image6.jpg

Now you can add the code to enable the Logging from your application into the defined "Target Trace Listeners"; in our case "Flat File" and "Event Log".

I have designed a Windows Form application which reads a file from a specified path location. If the file is found it loads the content into the text box, else in the case of the exception "FileNotFoundException" the error info is logged into the Log file (c:\exception.log) and the Event Log.

Image7.jpg

The C# Code will look like this:

using Microsoft.Practices.EnterpriseLibrary.Logging;
 
private voidbtnReadFile_Click(object sender, EventArgs e)
{
StreamReader sr =null;
 
   try
   {
       sr =newStreamReader(txtFilePath.Text);
 
       txtFileContent.Text = sr.ReadToEnd();
   }

   catch
(FileNotFoundException)
   {
       txtFileContent.Text="Exception details logged log file
                             and Event Viewer";             
 
       LogEntry objLog = new LogEntry();

       objLog.Message = "Please provide valid Filename";

 
       objLog.Categories.Add("File Read Error");
      Logger.Write(objLog);
   }
 
   finally
   {
      if (sr != null)
       {
           sr.Close();
       }
   }
}
 


}

Now if you open the C:\Exception.log you will see:
----------------------------------------
Timestamp: 10/1/2012 7:35:03 PM
Message: There is no explicit mapping for the categories 'File Read Error'. The log entry was:
Timestamp: 10/1/2012 7:35:03 PM
Message: Please provide valid Filename
Category: File Read Error
Priority: -1
EventId: 0
Severity: Information
Title:
Machine: VIDYAVRAT-PC
App Domain: LoggingApplicationBlock.vshost.exe
ProcessId: 9164
Process Name: C:\VidyaVrat\Microsoft .NET\Application Code POCs\EnterpriseLibrary-Application Blocks\LoggingApplicationBlock\LoggingApplicationBlock\bin\Debug\LoggingApplicationBlock.vshost.exe
Thread Name:
Win32 ThreadId:13588
Extended Properties:
Category:
Priority: -1
EventId: 6352
Severity: Error
Title:
Machine: VIDYAVRAT-PC
App Domain: LoggingApplicationBlock.vshost.exe
ProcessId: 9164
Process Name: C:\VidyaVrat\Microsoft .NET\Application Code POCs\EnterpriseLibrary-Application Blocks\LoggingApplicationBlock\LoggingApplicationBlock\bin\Debug\LoggingApplicationBlock.vshost.exe
Thread Name:
Win32 ThreadId:13588
Extended Properties:
----------------------------------------
Also, if you open the EventVwr.exe then you will see:

Image8.jpg

This concludes the explanation of how a Logging Application Block enables you to write a small amount of code to do such a critical task of auditing.