OK, terribly documented, but it works...this is just the source for a little HttpModule which tracks hits to a .TEXT blog - pretty simple but should give anyone who wants to do it a start. I'll post a more complete version at some point (mainly just want to test how this skin behaves with posted code ;-))

using System;

using System.Web;

using System.Data;

using System.Data.SqlClient;

using Dottext.Framework;

using System.Collections.Specialized;

using System.IO;

using System.Text;

using System.Xml.Serialization;

using System.Threading;

using System.Net;

using Microsoft.ApplicationBlocks.Data;

namespace ExtraControls

{

            ///

            /// Summary description for ViewTrackModule.

            ///

            public class ViewTrackModule : IHttpModule

            {

                        #region IHttpModule Members

                        public void Init(HttpApplication context)

                        {

                                    context.EndRequest += new EventHandler(context_EndRequest);

                                   

                        }

                        public void Dispose()

                        {

                                    // TODO:  Add ViewTrackModule.Dispose implementation

                        }

                        #endregion

                        ///

                        /// Ok, bit unusual...but I need the BlogConfig object to be available for the DB access...

                        ///

                        ///

                        ///

                        private void context_EndRequest(object sender, EventArgs e)

                        {

                                    HttpApplication httpApp = sender as HttpApplication;

                                    System.Uri  ur = httpApp.Request.UrlReferrer;

                                    string testHost = string.Empty;

                                    string thisHost = httpApp.Request.ServerVariables["SERVER_NAME"];

                                   

                                    if(ur != null)

                                    {

                                                testHost = ur.Host;

                                    }

                                    if(testHost != thisHost)

                                    {

                                   

                                                HttpRequest re = httpApp.Request;

                                               

                                                LogToDBDel del = new LogToDBDel(LogToDB);

                                                IAsyncResult ar = del.BeginInvoke(re,null,null);

                                    }

                                   

                        }

            private delegate void LogToDBDel(HttpRequest re);

            private void LogToDB(HttpRequest re)

                        {

                                    string m_connectionString =  Dottext.Framework.Configuration.BlogConfigurationSettings.Instance().BlogProviders.DbProvider.ConnectionString;

                                    string clientIP = re.UserHostAddress;

                        if(!clientIP.StartsWith("192.") && !clientIP.StartsWith("10."))

                        {

                                    string clientUserAgent = re.UserAgent;

                                    string clientReferer = re.ServerVariables["HTTP_REFERER"];

                                    string clientHostName = string.Empty;

                                    try

                                    {

                                                clientHostName = Dns.GetHostByAddress(clientIP).HostName;

                                    }

                                    catch(Exception)

                                    {

                                                clientHostName = re.UserHostName;

                                    }

                                    string clientQueryString = re.RawUrl;

                                    SqlParameter[] sqlParams = SqlHelperParameterCache.GetSpParameterSet(m_connectionString, "pr_Blog_SaveEntryStats");       

                                    sqlParams[0].Value = clientIP;

                                    sqlParams[1].Value = clientUserAgent;

                                    sqlParams[2].Value = clientHostName;

                                    sqlParams[3].Value = clientQueryString;

                                    sqlParams[4].Value = DateTime.Now;

                                    sqlParams[5].Value = clientReferer;

                                    try

                                    {

                                                SqlHelper.ExecuteNonQuery(m_connectionString, CommandType.StoredProcedure, "pr_Blog_SaveEntryStats", sqlParams) ;

                                    }

                                    catch(Exception)

                                    {

                                    }

                        }

                        }

            }

}

 As usual, this needs an entry in the web.config to hook in the module:

<httpModules>
  <add name="RequestLogger" type="ExtraControls.ViewTrackModule, ExtraControls"/>
</httpModules>