views:

1799

answers:

1

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

+4  A: 

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

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.

Ngu Soon Hui
i have just managed to do this with information from http://mitch-wheat.blogspot.com/2007/04/log4net-net-logging-tool.html but now I have the problem that the setup porject will not copy across the log4net.config file when the service is installed. How can I get the log4net.config file in my setup project?
Parag
My friend, I'd give you 1000 points if I could. It's Friday night, I wanna go home, and my stupid service was logging if run as a console app, but not when started from the Services panel. And it was the [assembly] attribute that was missing. Thanks.
Charlie Flowers