Maintenance is the correct spelling :)
--- Ron Grabowski <[EMAIL PROTECTED]> wrote:
> I'm toying with the idea of extending the AdoNetAppender to add the
> ability to run additional queries after a defined time period. The
> syntax would look something like this:
>
> <appender name="TableMaintenceAdoNetAppender"
> type="log4net.Appender.AdoNetAppender">
> <connectionType value="..." />
> <connectionString value="..." />
> <commandText value="..." />
> <tableMaintence>
> <interval value="3600" />
> <commandType="StoredProcedure" />
> <commandText value="FLUSH_DEBUG_LOGS" />
> </tableMaintence>
> <tableMaintence>
> <interval value="43200" />
> <commandText value="DELETE FROM Logs WHERE Level = 'INFO'" />
> </tableMaintence>
> <tableMaintence>
> <interval value="86400" />
> <commandText value="DELETE FROM Logs WHERE Level = 'WARN'" />
> </tableMaintence>
> </appender>
>
> The implementation is pretty straight forward:
>
> // untested
> protected override void SendBuffer(log4net.Core.LoggingEvent[]
> events)
> {
> base.SendBuffer(events);
> if (Connection != null &&
> Connection.State == ConnectionState.Open)
> {
> foreach (TableMaintence tableMaintence in tableMaintenceList)
> {
> if (tableMaintence.NeedsFlushing() == true)
> {
> try
> {
> using(IDbCommand cmd = Connection.CreateCommand())
> {
> cmd.CommandType = tableMaintence.CommandType;
> cmd.CommandText = tableMaintence.CommandText;
> cmd.ExecuteNonQuery();
> }
> tableMaintence.UpdateNextFlush();
> }
> catch(Exception ex)
> {
> ErrorHandler.Error("Exception while writing to database.", ex);
> }
> }
> }
> }
> }
>
> The down side is that NeedsFlush() will be called for each
> <tableMaintence> node after every log message if the buffer size of
> the
> base appender is set to 1. I'd like to add some sort of Timer so that
> the statements are called ever <interval> seconds and not just when
> log
> statements are written. I understand the code in this article:
>
> http://www.eggheadcafe.com/articles/20040916.asp
>
> but I'd rather not add a HttpModule to the web.config for my appender
> to work. Is it possible to create a static array of Timers; one timer
> for each interval? My gut tells me this is a BadIdea.
>
> I want to allow a list of <tableMaintence> nodes to be executed, not
> just one.
>
> I know I've asked this question before but I'm not sure how it
> applies
> to custom properties on appenders such as the <commandText> node
> inside
> of a <tableMaintence> node. Does the value attribute of my
> <commandText. mode accept PatternStrings?
>
> <!-- is this syntax valid ??? -->
> <commandText type="log4net.Layout.PatternLayout,log4net">
> <conversionPattern value="%m" />
> </commandText>
>
> I know that %m will most likely not contain anything meaningful in
> this
> context.
>
> Thanks,
> Ron
>