David,
I dont think its possible to share loggers or appenders across AppDomains, log4net stores them in static structures. It they were shared they would have to be marshal by ref objects, and then one of the domains would log a lot slower than the other (as it would have to cross the domain boundry for each call).

I've got different domains using the same config file by defining loggers at the top of the namespace in each domain, and having them use different appenders. So if domain 1 only uses classes from Namespace1(and its descendants) , and domain2 only uses Namespace2

<logger name="Namespace1">
       <appender-ref ref="MyAppender1" />
</logger>
<logger name="Namespace2">
       <appender-ref ref="MyAppender2/>
</logger>

to have the different appenders in each domain write to the same file, try setting the lockingModel of the RollingFile appender to MinimalLock.
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />

you will probably get by just changing the locking model and not doing the first step.

aaron

david crunchybear wrote:

Hi,

After not being able to solve this myself, I'm looking for some sort of best practise solution to a problem that I'm facing: My app (console app) has 2 appdomains, both of which need to log. In an ideal world, they would both log to the same place (in this instance a RollingFileAppender) and if there is non-convoluted manner in which to do this, that would be great (with both appdomains being given access to the same logger). However, if this is not possible, is there any other method of achieving something similar that can be recommended? If both app domains have to log to different locations, which is acceptable. How easy is this to do if both domains are using the same conf file? (I have tried this solution using 2 separate appenders with 2 separate loggers defined, but I had problems with file locks and only one worked!) an example would be great!

Thanks in advance,

-David


Reply via email to