logging-log4net-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Radovan Raszka" <ras...@hasam.cz>
Subject RE: Log4net in a windows service
Date Tue, 07 Oct 2008 05:46:39 GMT
You can configure log4net anywhere - in main service EXE, in DLL which really does the job....
The only condition is to configure logging system before its first use. You can create Init()
method somewhere in Logutil.dll to configure logging system and call it during application
startup.
If there is problem to configure logging using app.config file, try to use the second way
using separate config file to check if it works - if not, you have probably error in code
related to config file location.
R


________________________________

	From: Jeegnesh Sheth [mailto:jsheth@src-solutions.com] 
	Sent: Monday, October 06, 2008 2:23 PM
	To: Log4NET User
	Subject: RE: Log4net in a windows service
	
	

	Radovan,

	LogUtil.dll

	This has some custom logging as well as log4net dll reference and uses a custom appender
to log. This is where I perform

	 

	 

	Myservice.exe has the following dll's that it uses

	-          Dosomething.dl -à uses Logutil.dll and is included as a reference.

	-          Myservice.exe.app.config

	 

	 

	From your information, I assume I should do this in LogUtil.dll and in the default cstor
of Logutil, I should obtain the path to the myservice.exe.app.config path and set it.

	        log = LogManager.GetLogger(typeof(LogUtil)); in the cstor

	 

	Myservice.exe does not need to do any logging, only DoSomething library needs to perform
the logging.

	 

	 

	The error I get is a generic  .Net framework error showing all the assemblies which caused
the error which may be due to versioning but the logs do not indicate this. So I did a clean
install and that error was no longer the case but then it came down to just a system violation
error each time I try to perform xmlconfigurator.configure() in the default cstor of the Myservice.

	 

	Thanks

	 

	 

	From: Radovan Raszka [mailto:raszka@hasam.cz] 
	Sent: Saturday, October 04, 2008 4:32 PM
	To: Log4NET User
	Subject: RE: Log4net in a windows service

	 

	I configure log4net in main service class constructor. What kind of crash have you met -
any exception (what?) ?

	public class IPservice : ServiceBase

	{ ...

	    public IPservice()

	    {

	        InitializeComponent();

	        this.CanPauseAndContinue = false;

	        this.CanShutdown = true;

	        this.CanHandleSessionChangeEvent = false;

	        this.AutoLog = false;

	        this.ServiceName = IPservice.SrvName;

	        XmlConfigurator.Configure();

	        log = LogManager.GetLogger(typeof(IPservice));

	    }

	    protected override void OnStart(string[] args){ ...}

	    protected override void OnStop() {...}

	}

		 

		
________________________________


		From: Jeegnesh Sheth [mailto:jsheth@src-solutions.com] 
		Sent: Friday, October 03, 2008 10:36 PM
		To: Log4NET User
		Subject: RE: Log4net in a windows service

		Radovan,

		 Myservice.exe has the following:

		Default cstor

		 

		A main entry point into process, named main

		 

		 

		Onstart and onstop methods

		 

		If I place the XMlConfiguartor.configure() in any of the methods above, my applications
keeps crashing. Is there something I am missing? I am trying to use your first solution.

		 

		 

		Many thanks

		From: Radovan Raszka [mailto:raszka@hasam.cz] 
		Sent: Friday, October 03, 2008 3:58 PM
		To: Log4NET User
		Subject: RE: Log4net in a windows service

		 

		Ok, there is also dependency on where log4net is set up.

		Examples in my last mail works, if log4net is configured from Myservice.exe (not from DLL),
and config is stored in Myservice.exe.config (you add app.config to the project, but Visual
studio copies this file to the output folder as <projectname>.exe.config, what is correct)

		If configuration is done from DLL, then logutil.DLL.config probably can not be used (at
least it didn't work for me and I was told that application file is always searched as <processname>.exe.config),
so save config into Myservice.exe.config or use second example.

		Radovan

			 

			
________________________________


			From: Jeegnesh Sheth [mailto:jsheth@src-solutions.com] 
			Sent: Friday, October 03, 2008 9:22 PM
			To: Log4NET User
			Subject: RE: Log4net in a windows service

			Radovan,

			            This is how my application is set up

			 

			LogUtil.dll

			This has some custom logging as well as log4net dll reference and uses a custom appender
to log

			 

			 

			Myservice.exe has the following dll's that it uses

			-          Logutil.dll

			-          Dosomething.dl

			-          Myservice.exe.app.config

			 

			Dosomthing.dll instantiates logutil.dll to write the logs.

			 

			I tried putting your xmlconfigurator.configure in logutil.dll and that did not work

			 

			I then tried placing it in dosomething.dll which did not work

			 

			Placing it in myservice.exe did not produce anything

			 

			Thoughts/ suggestions?

			 

			From: Radovan Raszka [mailto:raszka@hasam.cz] 
			Sent: Friday, October 03, 2008 10:41 AM
			To: Log4NET User
			Subject: RE: Log4net in a windows service

			 

			there are 2 option:

			1/ XmlConfigurator.Configure();

			this configures log4net using app.config file, which must be in this form:

			<?xml version="1.0" encoding="utf-8" ?>

			<configuration>

			    <configSections>

			        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,
log4net" />

			    </configSections>

			    <appSettings>

			....

			    </appSettings>

			    <log4net>

			....

			    </log4net>

			</configuration>

			This is probably best solution as you have only one config file for both application and
log4net.

			2/ configure log4net using extra XML file

			XmlConfigurator.Configure(new System.IO.FileInfo(GetAppPath() + "log4net.xml"))

			.....

			public string GetAppPath()

			{

			string myPath = System.Reflection.Assembly.GetExecutingAssembly().Location;

			int i = myPath.LastIndexOf('\\');

			return myPath.Remove(i + 1);

			}

			Both solutions works well with service, but when log4net config is changed, you must restart
your service.


Mime
View raw message