Quartz.Net Windows Service Configure Logging

Posted by Tarun Arora on Geeks with Blogs See other posts from Geeks with Blogs or by Tarun Arora
Published on Sat, 17 Nov 2012 15:05:00 GMT Indexed on 2012/11/17 23:03 UTC
Read the original article Hit count: 519

Filed under:

In this blog post I’ll be covering,

  • Logging for Quartz.Net Windows Service
    • 01 – Why doesn’t Quartz.Net Windows Service log by default
    • 02 – Configuring Quartz.Net windows service for logging to eventlog, file, console, etc
    • 03 – Results: Logging in action

If you are new to Quartz.Net I would recommend going through,

 

01 – Why doesn’t Quartz.Net Windows Service log by default

If you are trying to figure out why…

  • The Quartz.Net windows service isn’t logging
  • The Quartz.Net windows service isn’t writing anything to the event log
  • The Quartz.Net windows service isn’t writing anything to a file
  • How do I configure Quartz.Net windows service to use log4Net
  • How do I change the level of logging for Quartz.Net

Look no further, This blog post should help you answer these questions.

Quartz.NET uses the Common.Logging framework for all of its logging needs. If you navigate to the directory where Quartz.Net Windows Service is installed (I have the service installed in C:\Program Files (x86)\Quartz.net, you can find out the location by looking at the properties of the service) and open ‘Quartz.Server.exe.config’ you’ll see that the Quartz.Net is already set up for logging to ConsoleAppender and EventLogAppender, but only ‘ConsoleAppender’ is set up as active. So, unless you have the console associated to the Quartz.Net service you won’t be able to see any logging.

<log4net>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%d [%t] %-5p %l - %m%n" />
        </layout>
    </appender>
    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%d [%t] %-5p %l - %m%n" />
        </layout>
    </appender>
    <root>
        <level value="INFO" />
        <appender-ref ref="ConsoleAppender" />
  <!-- uncomment to enable event log appending -->
        <!-- <appender-ref ref="EventLogAppender" /> -->
    </root>
</log4net>

Problem: In the configuration above Quartz.Net Windows Service only has ConsoleAppender active. So, no logging will be done to EventLog. More over the RollingFileAppender isn’t setup at all. So, Quartz.Net will not log to an application trace log file.

02 – Configuring Quartz.Net windows service for logging to eventlog, file, console, etc

Let’s change this behaviour by changing the config file… In the below config file,

  • I have added the RollingFileAppender. This will configure Quartz.Net service to write to a log file. (<appender name="GeneralLog" type="log4net.Appender.RollingFileAppender">)
  • I have specified the location for the log file (<arg key="configFile" value="Trace/application.log.txt"/>)
  • I have enabled the EventLogAppender and RollingFileAppender to be written to by Quartz. Net windows service
  • Changed the default level of logging from ‘Info’ to ‘All’. This means all activity performed by Quartz.Net Windows service will be logged. You might want to tune this back to ‘Debug’ or ‘Info’ later as logging ‘All’ will produce too much data to the logs. (<level value="ALL"/>)
  • Since I have changed the logging level to ‘All’, I have added applicationSetting to remove logging log4Net internal debugging. (<add key="log4net.Internal.Debug" value="false"/>)
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="quartz" type="System.Configuration.NameValueSectionHandler, 
                                     System, Version=1.0.5000.0,Culture=neutral, 
                                     PublicKeyToken=b77a5c561934e089" />
            <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
        <sectionGroup name="common">
            <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
        </sectionGroup>
    </configSections>

    <common>
        <logging>
            <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4net">
                <arg key="configType" value="INLINE" />                
                <arg key="configFile" value="Trace/application.log.txt"/>
                <arg key="level" value="ALL" />
            </factoryAdapter>
        </logging>
    </common>
    <appSettings>
      <add key="log4net.Internal.Debug" value="false"/>
    </appSettings>
    <log4net>
        <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%d [%t] %-5p %l - %m%n" />
            </layout>
        </appender>
        <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%d [%t] %-5p %l - %m%n" />
            </layout>
        </appender>
        <appender name="GeneralLog" type="log4net.Appender.RollingFileAppender">
            <file value="Trace/application.log.txt"/>
            <appendToFile value="true"/>
            <maximumFileSize value="1024KB"/>
            <rollingStyle value="Size"/>
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%d{HH:mm:ss} [%t] %-5p %c - %m%n"/>
            </layout>
          </appender>
        <root>
            <level value="ALL" />
            <appender-ref ref="ConsoleAppender" />
            <appender-ref ref="EventLogAppender" />
            <appender-ref ref="GeneralLog"/>
        </root>
    </log4net>
</configuration>

 

NotePlease ensure you restart the Quartz.Net Windows service for the config changes to be picked up by the service

 

03 – Results: Logging in action

Once you start the Quartz.Net Windows Service up, the logging should be initiated to write all activities in the Console, EventLog and File… See screen shots below…

SNAGHTML2556958

Figure – Quartz.Net Windows Service logging all activity to the event log

SNAGHTML257dd4f

Figure – Quartz.Net Windows Service logging all activity to the application log file

Where is the output from log4Net ConsoleAppender?

As a default behaviour, the console isn't available in windows services, web services, windows forms. The output will simply be dismissed. Unless you are running the process interactively. Which you can do by firing up Quartz.Server.exe –i to see the output

 

This was fourth in the series of posts on enterprise scheduling using Quartz.net, in the next post I’ll be covering troubleshooting why a scheduled task hasn’t fired on Quartz.net windows service. All Quartz.Net specific blog posts can listed here. Thank you for taking the time out and reading this blog post. If you enjoyed the post, remember to subscribe to http://feeds.feedburner.com/TarunArora. Stay tuned!

© Geeks with Blogs or respective owner