Friday, May 18, 2012
 
The best way to analyze your logs! Minimize
 Log4Net Mail archive   

The Log4Net mailing list is a great source of information about using log4Net, in this forum we collect all the messages in the log4net user list and some selected threads from the developer list.

Subject: 3rd party assembly logging configuration
Prev Next
You are not authorized to post a reply.

Author Messages
minherz

04/30/2007 12:07 PM  

Hello. I failed finding a clear answer to my question here, though there are
several posts that touching the subject.
I have a set of shared assembly which use log4net. However, the application
does not have to use it as well i do not want that the log4net configuration
of the application will dictate logging behavior of the shared assembly. In
the case the developer wants to output log from the shared assembly he will
have to define a separate configuration file. While the file is not there no
logging should be performed by the shared assembly.
I tried defining XmlConfiguration attribute with explicit config file name
in the AssemblyInfo of my shared library. It is either ignored or does not
work for other reason. All the output is displayed according to root
configuration of the application.
I know that i can filter it out by using logger element, but i have
different requirement.
I found several articles that suggest using in code call for configuration.
My problem is that the shared assembly is a class library which provide a
collection of classes and i have no idea which of them will be created
first. I also can not define some initialization method as it is against the
design requirements.
Can anybody advise how i can solve this matter?
--
View this message in context: http://www.nabble.com/3rd-party-assembly-logging-configuration-tf3668813.html#a10251023
Sent from the Log4net - Users mailing list archive at Nabble.com.

nicko@apache.org

04/30/2007 2:08 PM  

It sounds like you want to separate the logging done in your shared
assembly and the (optional) logging done in the main application.

All logging and logging configuration is done using a logger repository.
There is a default logger repository that is used by all assemblies,
however it is possible to use a different logger repository for your
shared assemblies.

On your shared assemblies you should specify the
log4net.Config.RepositoryAttribute. The RepositoryAttribute is used to
map the assembly to a named repository. All your shared assemblies
should specify the same name for the repository. E.g.

[assembly: log4net.Config.Repository("shared-assembly-product-name")]

Then all your assemblies will use a repository that is different to the
1 used by the application. This means that your assemblies will have
separate logging behaviour to the main application and the main
application does not need to know about log4net.

You should still use the XmlConfiguration attribute in your assembly to
specify where the logging configuration for your repository should be
loaded from.

This is quite complex to setup correctly. You may need to enable log4net
internal debug to see which logger repositories log4net is creating and
where it is trying to load the config from. For details see:

http://logging.apache.org/log4net/release/faq.html#internalDebug

Cheers,
Nicko

------------
Nicko Cadell
log4net development
http://logging.apache.org/log4net

minherz

05/01/2007 1:38 PM  

The subject of using repository is little cloudy for me, even after reading
documentation. If i want to have same hierarchical repository for my library
but starting from different root, then i have to use Repository attribute at
the assembly level of my library. Is it correct?
Do i have to enable internal debugging of log4net in both configuration
files or only in the application's configuration?
After i make use of different repository does the XmlConfigurer attribute in
the assembly level of my library enough to force log4net loading
configuration from the different file?

Thank you.
--
View this message in context: http://www.nabble.com/3rd-party-assembly-logging-configuration-tf3668813.html#a10267809
Sent from the Log4net - Users mailing list archive at Nabble.com.

nicko@apache.org

05/01/2007 2:05 PM  

The log4net internal debugging can be enabled by setting an <appSetting>
in the application's config file:

<appSettings>
  <add key="log4net.Internal.Debug" value="true"/>
</appSettings>

This must go into the applications .config file (or if it is a web app
then the Web.config file).


Setting the XmlConfigurator attribute on your assembly should cause it
to load its configuration separately from the main application.

There is an example application that is included in the log4net download
that shows this behaviour.

examples\net\1.0\Repository

This is made up of 3 assemblies.

SharedModule - this is an ordinary DLL, it uses logging, but does not
configure it.
SimpleApp - this is an EXE, it configures and uses logging.
SimpleModule - this is a DLL, that setups its own repository and
configures it.

To see the RepositoryAttribute and XmlConfiguratorAttribute have a look
at this example source file:

examples\net\1.0\Repository\SimpleModule\cs\src\Math.cs

Cheers,
Nicko
------------
Nicko Cadell
log4net development
http://logging.apache.org/log4net

minherz

05/01/2007 3:08 PM  

It does not work, though i configured all like in the example.
The internal debugging display that my library has no repository attribute.
I defined it as [assembly:
log4net.Config.Repository("RootNameSpaceOfTheLibrary")]
inside the AssemblyInfo.cs file and before the log4net.Config.XmlConfigurer
attribute.

minherz

05/01/2007 3:14 PM  

Thank you. I still must check it but it seems to be working.
Can you answer me to a question about hierarchy support when using
repository attribute?
Will log4net support the hierarchical loggers within library's configuration
if i setup a repository using the topmost namespace name of the library?

nicko@apache.org

05/01/2007 3:20 PM  

I'm not exactly sure I understand the question, but log4net supports a
hierarchy of loggers regardless of the RepositoryAttribute, there should
be no change in this behaviour.

The name of the repository does not have to match up to the name of your
assembly or any of your namespaces, it is just used to identify a
repository in the process.

Nicko

minherz

05/01/2007 3:31 PM  

I assume that root logger's name is empty string, so any type name used for
logger creation will be treated according to hierarchical rules and
independent from the "main" application.

And thank you again for fast and clear answers.

nicko@apache.org

05/01/2007 3:37 PM  

The root logger's name is NULL rather than empty, that is why you need
to configure it in the log4net XML config using the <root> element
rather than the <logger name=3D""> element. A logger with empty name
would be a child of the root logger.

The logger hierarchy exists within the repository. If you create your
own repository then it is completely separate to the repository and
logger hierarchy used in the main application.

Cheers,
Nicko

------------
Nicko Cadell
log4net development
http://logging.apache.org/log4net

You are not authorized to post a reply.
Forums > Log4Net > Log4Net Mail archive > 3rd party assembly logging configuration



ActiveForums 3.7

 

 

 

 

 

 

 

 

Log4Net Dashboard

Log analysis and monitoring made easy!

Log4Net Dashboard is a log viewer that can read log statements from a variety of logging output targets.

You can download a free developer version.

  

Check it out!

On the demonstration site you can try it  with live data.demo.l4ndash.com - Try Log4Net Dashboard with live data

The mail archive is a copy of all the mail sent to the mail address: log4net-user@logging.apache.org, organized as a forum.

If you would like to participate in the mail list, send a mail to log4net-user-subscribe@logging.apache.org.

More information about the mailing list is available on: http://logging.apache.org/log4net/support.html

 

A complete topic list is available and can be viewed here (warning, it takes some time to load)

 

Copyright 2005-2008 by FaktNet AS Terms Of Use Privacy Statement