Building the Http Module with Logging Application Block
Building the Http Module
In order to build an Http module we only need to implement
the IHttpModule interface. The following is a simple
LoggingHttpModule which log details when a web request start
and when web request end:
using System;
using System.Web;
using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;
using Microsoft.Practices.EnterpriseLibrary.Logging;
namespace HttpModules
{
public class LoggingHttpModule : IHttpModule
{
#region Members
private LogWriter _writer;
#endregion
#region IHttpModule Members
public void Dispose()
{
if (_writer != null)
{
_writer.Dispose();
}
}
public void Init(HttpApplication context)
{
CreateLogWriter();
context.BeginRequest += new EventHandler(context_BeginRequest);
context.EndRequest += new EventHandler(context_EndRequest);
}
private void CreateLogWriter()
{
ConfigureEnterpriseLibraryContainer();
_writer = EnterpriseLibraryContainer.Current.GetInstance<LogWriter>();
}
private void ConfigureEnterpriseLibraryContainer()
{
var builder = new ConfigurationSourceBuilder();
builder.ConfigureInstrumentation().EnableLogging();
builder.ConfigureLogging().WithOptions
.LogToCategoryNamed("General")
.WithOptions
.SetAsDefaultCategory()
.SendTo
.FlatFile("Log File")
.FormatWith(new FormatterBuilder()
.TextFormatterNamed("Textformatter"))
.ToFile("file.log");
var configSource = new DictionaryConfigurationSource();
builder.UpdateConfigurationWithReplace(configSource);
EnterpriseLibraryContainer.Current =
EnterpriseLibraryContainer.CreateDefaultContainer(configSource);
}
void context_BeginRequest(object sender, EventArgs e)
{
_writer.Write(new LogEntry
{
Message = "BeginRequest"
});
}
void context_EndRequest(object sender, EventArgs e)
{
_writer.Write(new LogEntry
{
Message = "EndRequest"
});
}
#endregion
}
}
Using The Module
In order to use the module all we need to do is to add a reference
to the class library that holds the LoggingHttpModule. Then we need
to register the module in the web.config file in the httpModules
element like:
<httpModules>
<add name="LoggingHttpModlue" type="HttpModules.LoggingHttpModule, HttpModules"/>
</httpModules>
That is it. Now the module will be executed whenever a request
start or end.
