<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Logging</title>
        <link>http://ayende.com/Blog/category/479.aspx</link>
        <description>Logging</description>
        <language>en-US</language>
        <copyright>Ayende Rahien</copyright>
        <managingEditor>Ayende@ayende.com</managingEditor>
        <generator>Subtext Version 1.9.3.51</generator>
        <item>
            <title>Introducing RollingSqlAppender</title>
            <link>http://ayende.com/Blog/archive/2006/11/18/7089.aspx</link>
            <description>&lt;p&gt;    I have explained before what the constraints I have when &lt;a href="http://www.ayende.com/Blog/ReadingTheLogs.aspx"&gt;working with logging&lt;/a&gt;. I got several good comments about it, and several has hit the nail directly on the head.&lt;/p&gt;
&lt;p&gt;    Just to recap, here is the list of my requirements:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;        The output from the logs should be deliverable by email by a layman. This basically means a file.&lt;/li&gt;
    &lt;li&gt;        The ouptut should allow me to slice / dice the data. The best way is if I could utilize existing SQL skills to do this.&lt;/li&gt;
    &lt;li&gt;        The system may run unattended for weeks at a time, so the log file can't reach huge proportions.&lt;/li&gt;
    &lt;li&gt;        I'm not really interested in historical data - something that happened long time ago is not important.&lt;/li&gt;
    &lt;li&gt;        Plug into my current logging infrastructure (log4net).&lt;/li&gt;
    &lt;li&gt;        Nice to have - Convention over configuration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;    After giving this much thought, I decided to implement a RollingSqliteAppender. This is based of the existing ADO.Net appender, but is focused on utilizing Sqlite only. Sqlite needs only a single file for its database, so it answers the first requirement, it also has a runtime (for .Net) of about less than 500Kb, so size / installation is not an issue. Despite writing to a file, it is a fully fledged database, meaning that I get to do all sorts of interesting things to it.&lt;/p&gt;
&lt;p&gt;    The third / forth requirements are what prompted the creation of this appender, rather than using the existing ADO.Net one. I took a look at RollingFileAppender and implemented similar functionality for my appender as well. Although I am checking rows, rather size/date, since this is a bit easier  to check. What is basically does is save all the logs to a sqlite file, until the amount of rows in the database is filled, then it rename the file and create a new one. Another reason for the need to create my own appender is that when creating a new file, the database structure is created for you automatically.From the name, you can figure out that this is a log4net appender, so integrating it is not an issue. &lt;/p&gt;
&lt;p&gt;    The last part is about minimum configuration. I tend to use the pretty standard logging table fairly often. That means [date, thread, level, logger, message, exception], so the appender is setup to support this (90% scenario, I would guess) out of the box. Here is how you configure the loggerin:&lt;/p&gt;
&lt;div style="border: 1px solid rgb(153, 153, 153); padding: 4px; width: 100%; background-color: rgb(255, 255, 225);"&gt;
&lt;p style="margin: 0cm 0cm 0pt; line-height: normal;" class="MsoNormal"&gt;        &lt;span style="font-size: 10pt; color: blue; font-family: Consolas;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: maroon; font-family: Consolas;"&gt;log4net&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: Consolas;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;        &lt;/span&gt;    &lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt; line-height: normal;" class="MsoNormal"&gt;        &lt;span style="font-size: 10pt; color: blue; font-family: Consolas;"&gt;&lt;span style=""&gt;       &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: maroon; font-family: Consolas;"&gt;appender&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: Consolas;"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; color: red; font-family: Consolas;"&gt;name&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: Consolas;"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: Consolas;"&gt;"&lt;span style="color: blue;"&gt;rolling-sqlite-appender&lt;/span&gt;"&lt;o:p&gt;&lt;/o:p&gt;        &lt;/span&gt;    &lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt; line-height: normal;" class="MsoNormal"&gt;        &lt;span style="font-size: 10pt; color: blue; font-family: Consolas;"&gt;&lt;span style=""&gt;                     &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: red; font-family: Consolas;"&gt;type&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: Consolas;"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: Consolas;"&gt;"&lt;span style="color: blue;"&gt;Rhino.Commons.Logging.RollingSqlliteAppender, Rhino.Commons&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;        &lt;/span&gt;&lt;/span&gt;    &lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt; line-height: normal;" class="MsoNormal"&gt;        &lt;span style="font-size: 10pt; color: blue; font-family: Consolas;"&gt;&lt;span style=""&gt;       &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: maroon; font-family: Consolas;"&gt;root&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: Consolas;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;        &lt;/span&gt;    &lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt; line-height: normal;" class="MsoNormal"&gt;        &lt;span style="font-size: 10pt; color: blue; font-family: Consolas;"&gt;&lt;span style=""&gt;              &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: maroon; font-family: Consolas;"&gt;appender-ref&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: Consolas;"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; color: red; font-family: Consolas;"&gt;ref&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: Consolas;"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: Consolas;"&gt;"&lt;span style="color: blue;"&gt;rolling-sqlite-appender&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;        &lt;/span&gt;&lt;/span&gt;    &lt;/p&gt;
&lt;p style="margin: 0cm 0cm 0pt; line-height: normal;" class="MsoNormal"&gt;        &lt;span style="font-size: 10pt; color: blue; font-family: Consolas;"&gt;&lt;span style=""&gt;       &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 10pt; color: maroon; font-family: Consolas;"&gt;root&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: Consolas;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;        &lt;/span&gt;    &lt;/p&gt;
&lt;p style="margin: 0cm 0cm 10pt;" class="MsoNormal"&gt;        &lt;span style="font-size: 10pt; color: blue; line-height: 115%; font-family: Consolas;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 10pt; color: maroon; line-height: 115%; font-family: Consolas;"&gt;log4net&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%; font-family: Consolas;"&gt;&amp;gt;&lt;/span&gt;    &lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;    This is it.&lt;/p&gt;
&lt;p&gt;    Now, it does provide a set of options that you can override (because I need that functionality fairly often). &lt;/p&gt;
&lt;p&gt;    Here is a list of the ones unique for the RollingSqliteAppender:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;        CreateScript - the script to generate the table(s) when creating a new database file. Default is to create the standard table (date, thread, level, logger, message, exception) named "logs".     &lt;/li&gt;
    &lt;li&gt;        TableName - &lt;em&gt;must &lt;/em&gt;match to the name of the table in CreateScript. Default: "logs"&lt;/li&gt;
    &lt;li&gt;        FileNameFormat - file format for the file. Default is {0}.log4net, where {0} is the current process name (which result is mostly correct results in most cases).&lt;/li&gt;
    &lt;li&gt;        Directory - where to save the files. Default: Current Directory&lt;/li&gt;
    &lt;li&gt;        MaxNumberOfRows - number of rows in the database that triggers rolling the file. Note that this is &lt;em&gt;not&lt;/em&gt; a hard number, it depends on your BufferSize settings and flush options. It is close enough for my needs. Default: 50,000&lt;/li&gt;
    &lt;li&gt;        MaxNumberOfBackUps - number of backup files to save. Backup files are given a numeric prefix where lower is newer. Default: 3&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="border-left: thick solid gray; margin: 0px 30px; padding: 4px; background-color: rgb(238, 238, 238);"&gt;Note: The default buffer size is set to 512, you may want to change that. This is probably the most common reason why people thinks that log4net is not working.&lt;/div&gt;
&lt;p&gt;    In my tests, each file was about 5Mb - 10Mb in size, and they compressed nicely to a more emailable size.&lt;/p&gt;
&lt;p&gt;    By the way, I really like the log4net architecture.&lt;/p&gt;
&lt;p&gt;    The code is &lt;a href="https://svn.sourceforge.net/svnroot/rhino-tools/trunk/rhino-commons/Rhino.Commons/Logging/"&gt;here&lt;/a&gt;&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/7089.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ayende Rahien</dc:creator>
            <guid>http://ayende.com/Blog/archive/2006/11/18/7089.aspx</guid>
            <pubDate>Sat, 18 Nov 2006 02:26:24 GMT</pubDate>
            <comments>http://ayende.com/Blog/archive/2006/11/18/7089.aspx#feedback</comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/7089.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Reading The Logs</title>
            <link>http://ayende.com/Blog/archive/2006/11/17/7090.aspx</link>
            <description>&lt;p&gt;    For production, there is nothing that can replace well thought-of logs. They are the #1 tool for understanding what is going on in a sytem. Often, they are the only real way to understand what is going on even when you are developing. This is often true in multi threaded programs, where just debugging them is not very effective.&lt;/p&gt;&lt;p&gt;    The problem with logging is that there are usually &lt;em&gt;too much &lt;/em&gt;of them. Following the trace of logs can be a daunting task when your system produce 50 logs per minutes on idle, and can produce hundreds and thousands of messages per minute while working. Just playing with the levels is not enough to make sense of things, you often need to correlate between several message, often at various logging levels, by different loggers.&lt;/p&gt;&lt;p&gt;    All of this points me to the not so surprising conclusion that logs are data, and that I should be able to handle them like I handle all other data sources (selecting, grouping, filtering, etc). Luckily for me, it is very easy to make log4net write to a database. I can't think of how many times the ability to slice and dice the data have saved me. For instnace, being able to find that between 10:05 - 10:15 the number of errors from the web service is passing 50, which cause a trigger in another part of the system, which caused all deliveries to arrive an hour late. There is simply no way I could look at the messages for a the whole day and find that out without this.&lt;/p&gt;&lt;p&gt;    So, after extolling the value of databases, why do I bother to post this?&lt;/p&gt;&lt;p&gt;    Well, there are two problems that I run into when logging to the database. The first is that if the database is down, you don't do any logging (and in log4net 1.2.9, if the database is down, you won't be &lt;em&gt;doing&lt;/em&gt; any logging afterward to the database, even if it came back up). The second is that if the application is at a client, and I get a call about an issue, there isn't much I can do about it without the logs.&lt;/p&gt;&lt;p&gt;    The guy in charge for letting me know about problems can't read the issues by himself. Idealy, he could just email me the logs, and I would go over them and understand what the problem was. The problem is that to get an export from the DB requires a DBA to handle it, who is not always avialable. Writing to file and getting that is possible, but I already explained how hard it is to get to the point from a file. Getting log4net to produce a file that can be imported to SQL is possible, but it probably isn't trivail.&lt;/p&gt;&lt;p&gt;    Messy, messy situation. I became familiar with a lot of large file viewers and remembering a lot of things at the same time when trying to figure out a problem. I also learned to recognize when this is not a good idea and &lt;a href="http://www.ayende.com/Blog/WarStoriesCheckTheStupidStuffToo.aspx"&gt;driving there to take a look at the database&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;    I have a solution for this, which I will post shortly, but in the meantime, I am interested in what you think about this issue...&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/7090.aspx" width="1" height="1" /&gt;</description>
            <guid>http://ayende.com/Blog/archive/2006/11/17/7090.aspx</guid>
            <pubDate>Fri, 17 Nov 2006 08:21:59 GMT</pubDate>
            <comments>http://ayende.com/Blog/archive/2006/11/17/7090.aspx#feedback</comments>
            <slash:comments>10</slash:comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/7090.aspx</wfw:commentRss>
        </item>
        <item>
            <title>You log too much</title>
            <link>http://ayende.com/Blog/archive/2006/09/10/7278.aspx</link>
            <description>&lt;p&gt;I got this page when I looked at the logs of an application that was running 
for about four hours...&lt;/p&gt;
&lt;br /&gt;&lt;p&gt;&lt;img alt="(Image from clipboard).png" src="Images/tmp729B.png" /&gt;&lt;/p&gt;&lt;p&gt;Somehow I don't think that the logs will be very useful in this form...&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/7278.aspx" width="1" height="1" /&gt;</description>
            <guid>http://ayende.com/Blog/archive/2006/09/10/7278.aspx</guid>
            <pubDate>Sun, 10 Sep 2006 16:43:15 GMT</pubDate>
            <comments>http://ayende.com/Blog/archive/2006/09/10/7278.aspx#feedback</comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/7278.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Measuring NHibernate's Queries Per Page</title>
            <link>http://ayende.com/Blog/archive/2006/09/07/7284.aspx</link>
            <description>&lt;br /&gt;One of the biggest problems with abstractions is that they may allow you to do stupid things without them being obvious. In OR/M-land, that usually means SELECT N+1 issues.&lt;br /&gt;The problem is that you often develop a certain functionality first, and only then realize that while you tested, all was fine and dandy on the five items that you had, but on the real system, you have 5,000, and the DBA is on its way to ER...&lt;br /&gt;&lt;br /&gt;Anyway, I am currently working with Web Applications, and I wanted to get a good indication about what pages are troublesome.&lt;br /&gt;Being who I am, I immediately began to design a framework that would correlate page requests to trace data from SQL Server, and then another system that would analyze it and spit out a report saying: "Wow, that ScaryReport.aspx page is making 30% of the calls in the application, take a look at that".&lt;br /&gt;&lt;br /&gt;Not wishing to spent the next two years on this project, I decided to do something a bit more modest, and utilize the already existing infrastructure.&lt;br /&gt;In this case ,the infrastructure is NHibernate and lot4net.&lt;br /&gt;&lt;br /&gt;The secret tidbit is that NHibernate logs all queries to a log4net logger named "NHibernate.SQL". From there, it was a simple matter of adding a &lt;a href="http://svn.berlios.de/wsvn/rhino-mocks/trunk/rhino-commons/Rhino.Commons/Logging/WebLoggingHelper.cs?op=file&amp;amp;rev=0&amp;amp;sc=0"&gt;logging helpers&lt;/a&gt; to Rhino Commons that would output the current page and the current request id (the request hash code, basically).&lt;br /&gt;Then, It was a matter of defining the following table:&lt;br /&gt;&lt;br /&gt;













&lt;p class="MsoNormal" dir="ltr" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style="font-size: 13pt; font-family: &amp;quot;Courier New&amp;quot;; color: blue;"&gt;CREATE&lt;/span&gt;&lt;span style="font-size: 13pt; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; color: gray;"&gt; &lt;span style="color: blue;"&gt;TABLE&lt;/span&gt; [dbo]&lt;span style="color: gray;"&gt;.&lt;/span&gt;[NHibernatePerPageQueries]&lt;span style=""&gt;(&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;    &lt;/span&gt;[Id]
[int] &lt;span style="color: blue;"&gt;IDENTITY&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;1&lt;span style="color: gray;"&gt;,&lt;/span&gt;1&lt;span style="color: gray;"&gt;)&lt;/span&gt; &lt;span style="color: blue;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color: blue;"&gt;KEY&lt;/span&gt; &lt;span style="color: gray;"&gt;NOT&lt;/span&gt; &lt;span style=""&gt;NULL,&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;    &lt;/span&gt;[RequestId]
[int] &lt;span style="color: gray;"&gt;NOT&lt;/span&gt; &lt;span style=""&gt;NULL,&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;    &lt;/span&gt;[Date]
[datetime] &lt;span style="color: gray;"&gt;NOT&lt;/span&gt; &lt;span style=""&gt;NULL,&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;    &lt;/span&gt;[Message]
[nvarchar]&lt;span style="color: gray;"&gt;(&lt;/span&gt;&lt;span style="color: fuchsia;"&gt;max&lt;/span&gt;&lt;span style="color: gray;"&gt;)&lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;span style="color: gray;"&gt;NOT&lt;/span&gt; &lt;span style=""&gt;NULL,&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;    &lt;/span&gt;[PageURL]
[nvarchar]&lt;span style="color: gray;"&gt;(&lt;/span&gt;&lt;span style="color: fuchsia;"&gt;max&lt;/span&gt;&lt;span style="color: gray;"&gt;)&lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;span style="color: gray;"&gt;NOT&lt;/span&gt; &lt;span style="color: gray;"&gt;NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;)&lt;/span&gt;&lt;/p&gt;

&lt;br /&gt;&lt;p&gt;&lt;/p&gt;Then, to define the appender:&lt;br /&gt;&lt;br /&gt;







































































&lt;p class="MsoNormal" dir="ltr" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;appender&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;name&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;NHibernatePerPageAppender&lt;/span&gt;"&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;           &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;type&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;log4net.Appender.AdoNetAppender&lt;/span&gt;"&lt;span style=""&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;     &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;bufferSize&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;1&lt;/span&gt;0"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;     &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;connectionType&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;System.Data.SqlClient.SqlConnection,&lt;br /&gt;System.Data,
Version=2.0.0.0, Culture=neutral, &lt;br /&gt;PublicKeyToken=b77a5c561934e089&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;     &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;connectionString&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;Data Source=localhost;Initial&lt;br /&gt;Catalog=Logs;User
ID=logger;Password=logger;&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;     &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;commandText&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;INSERT INTO dbo.[NHibernatePerPageQueries] &lt;br /&gt;([Date],[Message],[PageUrl],[RequestId]) VALUES (@log_date, @message,&lt;br /&gt;@pageUrl,@currentRequestId)&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;     &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;parameter&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;           &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;parameterName&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;@log_date&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;           &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;dbType&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;DateTime&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;           &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;layout&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;type&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;log4net.Layout.RawTimeStampLayout&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;     &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;parameter&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;     &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;parameter&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;           &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;parameterName&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;@message&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;           &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;dbType&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;String&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;           &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;size&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;4000&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;br /&gt;           &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;layout&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;type&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;log4net.Layout.PatternLayout&lt;/span&gt;"&lt;span style=""&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;                &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;conversionPattern&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;%message&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;           &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;layout&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;     &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;parameter&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;     &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;parameter&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;           &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;parameterName&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;@pageUrl&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;           &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;dbType&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;String&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;           &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;size&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;2000&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;           &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;layout&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;type&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;log4net.Layout.PatternLayout&lt;/span&gt;"&lt;span style=""&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;                &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;conversionPattern&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;%property{nhibernate_page_url}&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;           &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;layout&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;     &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;parameter&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;     &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;parameter&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;           &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;parameterName&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;@currentRequestId&lt;/span&gt;"&lt;span style=""&gt;
/&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;           &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;dbType&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;String&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;           &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;size&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;2000&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;           &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;layout&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;type&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;log4net.Layout.PatternLayout&lt;/span&gt;"&lt;span style=""&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;                &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;conversionPattern&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;%property{current_request_id}&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;           &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;layout&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;     &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;parameter&lt;/span&gt;&lt;span style="font-size: 13pt; line-height: 115%; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 13pt; line-height: 115%; font-family: Consolas; color: maroon;"&gt;appender&lt;/span&gt;&lt;span style="font-size: 13pt; line-height: 115%; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span dir="rtl" style="font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;;" lang="HE"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;br /&gt;And defining the logger:&lt;br /&gt;







&lt;p class="MsoNormal" dir="ltr" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;logger&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;name&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;NHibernate.SQL&lt;/span&gt;"&lt;span style=""&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;     &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;level&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;DEBUG&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;     &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;appender-ref&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;ref&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; line-height: 115%; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;NHibernatePerPageAppender&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 13pt; line-height: 115%; font-family: Consolas; color: maroon;"&gt;logger&lt;/span&gt;&lt;span style="font-size: 13pt; line-height: 115%; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;br /&gt;We are still not done, though, we need the following in the Application_Start():&lt;br /&gt;



&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left; line-height: normal; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: teal;"&gt;GlobalContext&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: teal;"&gt;.Properties[&lt;span style="color: maroon;"&gt;"nhibernate_page_url"&lt;/span&gt;]
= &lt;span style="color: teal;"&gt;WebLoggingHelper&lt;/span&gt;.CurrentPage;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;GlobalContext&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas;"&gt;.Properties[&lt;span style="color: maroon;"&gt;"current_request_id"&lt;/span&gt;]
= &lt;span style="color: teal;"&gt;WebLoggingHelper&lt;/span&gt;.CurrentRequestId;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;br /&gt;This is it, now I can correlate the number of queries per page hits, and act accordingly.&lt;br /&gt;Normally, I think that the following queries should be enough:&lt;br /&gt;&lt;br /&gt;

&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left; line-height: normal; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style="font-size: 13pt; font-family: &amp;quot;Courier New&amp;quot;; color: green;"&gt;-- Get pages ordered by number of
total queries made from them&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;







&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left; line-height: normal; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style="font-size: 13pt; font-family: &amp;quot;Courier New&amp;quot;; color: blue;"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: &amp;quot;Courier New&amp;quot;; color: blue;"&gt; &lt;span style="color: fuchsia;"&gt;COUNT&lt;/span&gt;&lt;span style="color: gray;"&gt;(*)&lt;/span&gt; [Number Of Queries In Page]&lt;span style="color: gray;"&gt;,&lt;/span&gt; PageUrl &lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;FROM&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: &amp;quot;Courier New&amp;quot;; color: blue;"&gt; NHibernatePerPageQueries&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;WHERE&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: &amp;quot;Courier New&amp;quot;; color: blue;"&gt; &lt;span style="color: fuchsia;"&gt;substring&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;&lt;span style="color: blue;"&gt;Message&lt;/span&gt;&lt;span style="color: gray;"&gt;,&lt;/span&gt;1&lt;span style="color: gray;"&gt;,&lt;/span&gt;1&lt;span style="color: gray;"&gt;)&lt;/span&gt; &lt;span style="color: gray;"&gt;!=&lt;/span&gt; &lt;span style="color: red;"&gt;'@'&lt;/span&gt; &lt;span style="color: green;"&gt;-- remove parameters
logs&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;GROUP&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt; &lt;span style="color: blue;"&gt;BY&lt;/span&gt;
PageUrl &lt;span style="color: blue;"&gt;ORDER&lt;/span&gt; &lt;span style="color: blue;"&gt;BY&lt;/span&gt;
&lt;span style="color: fuchsia;"&gt;COUNT&lt;/span&gt;&lt;span style="color: gray;"&gt;(*)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left; line-height: normal; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style="font-size: 13pt; font-family: &amp;quot;Courier New&amp;quot;; color: gray;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left; line-height: normal; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style="font-size: 13pt; font-family: &amp;quot;Courier New&amp;quot;; color: green;"&gt;-- Get pages ordered by number of
queries per page&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;











&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left; line-height: normal; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style="font-size: 13pt; font-family: &amp;quot;Courier New&amp;quot;; color: blue;"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: &amp;quot;Courier New&amp;quot;; color: blue;"&gt; &lt;span style="color: fuchsia;"&gt;AVG&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;countOfQueries&lt;span style="color: gray;"&gt;)&lt;/span&gt;
[Number Of Queries In Page Per Request]&lt;span style="color: gray;"&gt;,&lt;/span&gt;
PageUrl &lt;span style="color: blue;"&gt;FROM&lt;/span&gt; &lt;span style=""&gt;(&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;     &lt;/span&gt;&lt;span style="color: blue;"&gt;SELECT&lt;/span&gt; &lt;span style="color: fuchsia;"&gt;COUNT&lt;/span&gt;&lt;span style="color: gray;"&gt;(*)&lt;/span&gt; countOfQueries&lt;span style="color: gray;"&gt;,&lt;/span&gt;
PageUrl &lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;     &lt;/span&gt;&lt;span style="color: blue;"&gt;FROM&lt;/span&gt; NHibernatePerPageQueries&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;     &lt;/span&gt;&lt;span style="color: blue;"&gt;WHERE&lt;/span&gt; &lt;span style="color: fuchsia;"&gt;substring&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;&lt;span style="color: blue;"&gt;Message&lt;/span&gt;&lt;span style="color: gray;"&gt;,&lt;/span&gt;1&lt;span style="color: gray;"&gt;,&lt;/span&gt;1&lt;span style="color: gray;"&gt;)&lt;/span&gt; &lt;span style="color: gray;"&gt;!=&lt;/span&gt; &lt;span style="color: red;"&gt;'@'&lt;/span&gt; &lt;span style=""&gt;-- remove parameters
logs&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;     &lt;/span&gt;&lt;span style="color: blue;"&gt;GROUP&lt;/span&gt; &lt;span style="color: blue;"&gt;BY&lt;/span&gt; PageUrl&lt;span style="color: gray;"&gt;,&lt;/span&gt; RequestId &lt;span style="color: gray;"&gt;)&lt;/span&gt;
innerQuery &lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;GROUP&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt; &lt;span style="color: blue;"&gt;BY&lt;/span&gt;
PageUrl &lt;span style="color: blue;"&gt;ORDER&lt;/span&gt; &lt;span style="color: blue;"&gt;BY&lt;/span&gt;
&lt;span style="color: fuchsia;"&gt;AVG&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;countOfQueries&lt;span style="color: gray;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left; line-height: normal; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style="font-size: 13pt; font-family: &amp;quot;Courier New&amp;quot;; color: gray;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

Enjoy,&lt;br /&gt;&lt;img src="http://ayende.com/Blog/aggbug/7284.aspx" width="1" height="1" /&gt;</description>
            <guid>http://ayende.com/Blog/archive/2006/09/07/7284.aspx</guid>
            <pubDate>Thu, 07 Sep 2006 15:09:47 GMT</pubDate>
            <comments>http://ayende.com/Blog/archive/2006/09/07/7284.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/7284.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Performance Logging</title>
            <link>http://ayende.com/Blog/archive/2006/09/07/7285.aspx</link>
            <description>&lt;br /&gt;I just added a small &lt;a href="http://svn.berlios.de/wsvn/rhino-mocks/trunk/rhino-commons/Rhino.Commons/HttpModules/PagePerformanceModule.cs?op=file&amp;amp;rev=0&amp;amp;sc=0"&gt;http module&lt;/a&gt; to Rhino Commons. It is a very simple module that times how long it takes to process a page.&lt;br /&gt;It only times the server-side processing, of course, but it is a great way to tell you where you need to pay attention.&lt;br /&gt;It is using log4net to log the data, so you can redirect the output to a database, and from there, you can get all the data you want.&lt;br /&gt;&lt;br /&gt;Configurating the module is very simple. Create the following table:&lt;br /&gt;















&lt;p class="MsoNormal" dir="ltr" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style="font-size: 13pt; font-family: &amp;quot;Courier New&amp;quot;; color: blue;"&gt;CREATE&lt;/span&gt;&lt;span style="font-size: 13pt; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; color: gray;"&gt; &lt;span style="color: blue;"&gt;TABLE&lt;/span&gt; [dbo]&lt;span style="color: gray;"&gt;.&lt;/span&gt;[PagePerformance]&lt;span style=""&gt;(&lt;br /&gt;     &lt;/span&gt;[Id]
[int] &lt;span style="color: blue;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color: blue;"&gt;KEY&lt;/span&gt;
&lt;span style="color: blue;"&gt;IDENTITY&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;1&lt;span style="color: gray;"&gt;,&lt;/span&gt;1&lt;span style="color: gray;"&gt;)&lt;/span&gt; &lt;span style="color: gray;"&gt;NOT&lt;/span&gt; &lt;span style=""&gt;NULL,&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;     &lt;/span&gt;[Date]
[datetime] &lt;span style="color: gray;"&gt;NOT&lt;/span&gt; &lt;span style=""&gt;NULL,&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;     &lt;/span&gt;[Message]
[nvarchar]&lt;span style="color: gray;"&gt;(&lt;/span&gt;&lt;span style="color: fuchsia;"&gt;max&lt;/span&gt;&lt;span style="color: gray;"&gt;)&lt;/span&gt; &lt;span style="color: gray;"&gt;NOT&lt;/span&gt; &lt;span style=""&gt;NULL,&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;     &lt;/span&gt;[PageURL]
[nvarchar]&lt;span style="color: gray;"&gt;(&lt;/span&gt;&lt;span style="color: fuchsia;"&gt;max&lt;/span&gt;&lt;span style="color: gray;"&gt;)&lt;/span&gt; &lt;span style="color: gray;"&gt;NOT&lt;/span&gt; &lt;span style=""&gt;NULL,&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;     &lt;/span&gt;[Duration]
[nvarchar]&lt;span style="color: gray;"&gt;(&lt;/span&gt;50&lt;span style="color: gray;"&gt;)&lt;/span&gt; &lt;span style="color: gray;"&gt;NOT&lt;/span&gt; &lt;span style=""&gt;NULL,&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;     &lt;/span&gt;[StartRequest]
[datetime] &lt;span style="color: gray;"&gt;NOT&lt;/span&gt; &lt;span style="color: gray;"&gt;NULL&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;)&lt;/span&gt;&lt;/p&gt;

Now, add the following to your &amp;lt;httpModules&amp;gt; tag in web.config:&lt;br /&gt;







&lt;p class="MsoNormal" dir="ltr" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;httpModules&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;     &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;add&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;name&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;PagePerformanceModule&lt;/span&gt;"&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;           &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;type&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; line-height: 115%; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;Rhino.Commons.HttpModules.PagePerformanceModule&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 13pt; line-height: 115%; font-family: Consolas; color: maroon;"&gt;httpModules&lt;/span&gt;&lt;span style="font-size: 13pt; line-height: 115%; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;br /&gt;&lt;p&gt;&lt;/p&gt;Finally, we define in log4net.config the appender configuration:&lt;br /&gt;&lt;br /&gt;





















































































&lt;p class="MsoNormal" dir="ltr" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;appender&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;name&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;PagePerfAppender&lt;/span&gt;"&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;           &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;type&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;log4net.Appender.AdoNetAppender&lt;/span&gt;"&lt;span style=""&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;     &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;bufferSize&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;10&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;     &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;connectionType&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;System.Data.SqlClient.SqlConnection, &lt;br /&gt;System.Data,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;     &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;connectionString&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;Data Source=localhost;Initial &lt;br /&gt;Catalog=Logs;User
ID=logger;Password=logger;&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;     &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;commandText&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;INSERT INTO dbo.PagePerformance &lt;br /&gt;([Date],[Message],[PageUrl],[Duration],[StartRequest]) VALUES (@log_date,
@message, @pageUrl, @duration, @startRequest)&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;     &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;parameter&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;           &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;parameterName&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;@log_date&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;           &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;dbType&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;DateTime&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;           &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;layout&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;type&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;log4net.Layout.RawTimeStampLayout&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;     &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;parameter&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;     &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;parameter&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;           &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;parameterName&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;@message&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;           &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;dbType&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;String&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;           &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;size&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;4000&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;           &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;layout&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;type&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;log4net.Layout.PatternLayout&lt;/span&gt;"&lt;span style=""&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;                &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;conversionPattern&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;%message&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;           &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;layout&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;     &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;parameter&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;     &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;parameter&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;           &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;parameterName&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;@pageUrl&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;           &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;dbType&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;String&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;           &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;size&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;2000&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;           &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;layout&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;type&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;log4net.Layout.PatternLayout&lt;/span&gt;"&lt;span style=""&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;                &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;conversionPattern&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;%property{page_url}&lt;/span&gt;"&lt;span style=""&gt;
/&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;           &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;layout&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;span style=""&gt;&lt;br /&gt;     &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;parameter&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;     &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;parameter&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;           &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;parameterName&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;@duration&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;           &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;dbType&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;String&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;           &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;size&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;50&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;           &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;layout&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;type&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;log4net.Layout.PatternLayout&lt;/span&gt;"&lt;span style=""&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;                &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;conversionPattern&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;%property{page_duration}&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;           &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;layout&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;     &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;parameter&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;     &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;parameter&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;           &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;parameterName&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;@StartRequest&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;           &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;dbType&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;DateTime&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span style=""&gt;&lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;layout&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;type&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;log4net.Layout.PatternLayout&lt;/span&gt;"&lt;span style=""&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;                &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;conversionPattern&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;%property{start_request}&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;           &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;layout&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;     &lt;/span&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;parameter&lt;/span&gt;&lt;span style="font-size: 13pt; line-height: 115%; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 13pt; line-height: 115%; font-family: Consolas; color: maroon;"&gt;appender&lt;/span&gt;&lt;span style="font-size: 13pt; line-height: 115%; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span dir="rtl" style="font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;;" lang="HE"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

The page_duration, start_request and page_url properties are added to log4net configuration by the http module.&lt;br /&gt;Then, all that is left is defining the logger itself:&lt;br /&gt;







&lt;p class="MsoNormal" dir="ltr" style="text-align: left; direction: ltr; unicode-bidi: embed;"&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;logger&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;name&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;Rhino.Commons.HttpModules.PagePerformanceModule&lt;/span&gt;"&lt;span style=""&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;     &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;level&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;value&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;DEBUG&lt;/span&gt;"&lt;span style=""&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;     &lt;/span&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: maroon;"&gt;appender-ref&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt; &lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: red;"&gt;ref&lt;/span&gt;&lt;span style="font-size: 13pt; font-family: Consolas; color: blue;"&gt;=&lt;/span&gt;&lt;span style="font-size: 13pt; line-height: 115%; font-family: Consolas; color: blue;"&gt;"&lt;span style="color: blue;"&gt;PagePerfAppender&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 13pt; line-height: 115%; font-family: Consolas; color: maroon;"&gt;logger&lt;/span&gt;&lt;span style="font-size: 13pt; line-height: 115%; font-family: Consolas; color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span dir="rtl" style="font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;;" lang="HE"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

If everything went well, you have now got yourself a table in the DB that measures &lt;br /&gt;how much it takes to serve each page.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note&lt;/b&gt;: There is a small buffer (10 page requests) defined, to reduce the cost of the logging, so you would need to hit refresh a couple of time before you see the results in the table.&lt;br /&gt;&lt;img src="http://ayende.com/Blog/aggbug/7285.aspx" width="1" height="1" /&gt;</description>
            <guid>http://ayende.com/Blog/archive/2006/09/07/7285.aspx</guid>
            <pubDate>Thu, 07 Sep 2006 14:43:32 GMT</pubDate>
            <comments>http://ayende.com/Blog/archive/2006/09/07/7285.aspx#feedback</comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/7285.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>