Search code examples
windows-serviceslog4net

How configure log4net for a c# Windows service


I have a windows service where the app.config file and the log4net.config files are seperate. The logging is not working.

In my app.config file, I have the following in the section:

<add key="log4net.Config" value="log4net.config"/>

This works if in the value I specify an absolute path to the log4net.config file.

Do I need to supply an absolute path to the log4net.cong? Both the log4net.config and app.config file are in the same folder as the executable.

any ideas?

Parag


Solution

  • Maybe this is helpful ([Moving your Log4Net configuration out of web.config with ASP.NET 2.0 web sites][1].).

    Here are the parts that you might be interested:

    Tell the application to configure log4net using this config file. There are really two spots for this. First, the global.asax and second the assemblyInfo.cs file. Note, that most of the time you will start out with a global.asax file with all of the code inline. For whatever reason, the only way I could get this to work was to break the global.asax up to use a code-behind and then ass the assemblyInfo.cs file. So it ends up looking like this.

    global.asax: <%@ Application Language="C#" Inherits="GlobalAsax" %> global.asax.cs (in your App_Code folder):

    using System;
    using System.Web;
    
    public class GlobalAsax : HttpApplication
    {
        // you may have lots of other code here
        void Application_Start(object sender, EventArgs e)
        {
            log4net.Config.XmlConfigurator.Configure();
        }
    }
    

    Now that you have your application calling log4net's configuration, you can set an attribute in your assembly info so that log4net knows where to look for the configuration file. AssemblyInfo.cs (in your App_Code folder):

    [assembly:log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

    The watch flag tells log4net to keep an

    eye on the configuration file for potential changes. This is helpful if you want to change the configuration from logging everthing to errors only during the middle of your testing.

    To make sure that the log4net.config is always there, add the log4net.config to the csproject, and set it to CopyAlways. It should be presented in the debug folder.

    You can use a script to copy everything to a release folder, or if you are using MS setup project, manually add that file into the project. A reference will then be added. [1]: https://web.archive.org/web/20160928002238/http://geekswithblogs.net:80/bsherwin/archive/2008/02/15/119657.aspx