You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4cxx-user@logging.apache.org by Jo...@kisters.de on 2007/12/14 09:33:58 UTC
Own Appenders
Hey there I want to modify the XMLSocketAppender to suit my needs. What do
I have to do in order to use it?
Can I build it in it's own library like you can in JAVA and C#? And if so,
where do I have to put this library?
How do I address it inside the log4cxx.properties?
Thanx in advance,
Johannes Frank
Re: Own Appenders
Posted by Curt Arnold <ca...@apache.org>.
On Dec 14, 2007, at 2:33 AM, Johannes.Frank@kisters.de wrote:
>
> Hey there I want to modify the XMLSocketAppender to suit my needs.
> What do I have to do in order to use it?
> Can I build it in it's own library like you can in JAVA and C#? And
> if so, where do I have to put this library?
> How do I address it inside the log4cxx.properties?
> Thanx in advance,
>
> Johannes Frank
I'd be interested in knowing what modifications you'd like to make.
If they would benefit the wider community, they could go in log4cxx
itself.
You could put a custom appender anywhere you like, either in your
application or shared library or in its own shared library.
The essential bit to use your custom appender is to trigger
registration of your class before configuration. The
IMPLEMENT_LOG4CXX_OBJECT macro is typically sufficient to do that.
If you are logging in the constructors of static objects, you may need
to force the order of initialization, either through calling your
appender's static registerClass() method or by packaging your appender
in a shared library since all the shared library static members will
be initialized before the static members in your app that may be
logging.
When parsing class names, log4cxx will attempt to match the full name
from the configuration file before attempting to match just the final
element following the last "." or "$". So if your appender is
something like:
class MyXMLSocketAppender : public XMLSocketAppender {
DECLARE_LOG4CXX_OBJECT(MyXMLSocketAppender)
...
};
Then you could address it like:
log4j.appender.A=MyXMLSocketAppender
or
log4j.appender.A=org.example.allthisisignored.MyXMLSocketAppender
src/test/cpp/vectorappender.h and .cpp is an example of a custom
appender compiled into an application.