This example shows how to extend Log4cxx with a new appender.
 
 
 
namespace com::foo {
 
class NullWriterAppender : public AppenderSkeleton {
public:
 
    NullWriterAppender(){}
 
    void close() override{}
 
    bool requiresLayout() const override {
        return false;
    }
 
    void append(const spi::LoggingEventPtr& event, helpers::Pool& p) override {
        
    }
 
    void activateOptions(helpers::Pool& ) override {
        
    }
 
    void setOption(const LogString& option, const LogString& value) override {
        if (helpers::StringHelper::equalsIgnoreCase
            ( option
            , LOG4CXX_STR("SOMEVALUE")
            , LOG4CXX_STR("somevalue")
            ))
        {
            
        }
    }
};
 
 
}
 
int main( int argc, char** argv )
{
    xml::DOMConfigurator::configure( "custom-appender.xml" );
 
    LoggerPtr rootLogger = Logger::getRootLogger();
    LoggerPtr nullLogger = Logger::getLogger( "NullLogger" );
 
    LOG4CXX_INFO( nullLogger, 
"This message will be discarded" );
 
}
#define LOG4CXX_INFO(logger, message)
Add a new logging event containing message to attached appender(s) if logger is enabled for INFO even...
Definition: log4cxx/logger.h:2307
 
#define LOG4CXX_NS
Definition: log4cxx.h:104
 
#define LOG4CXX_CAST_ENTRY(Interface)
Definition: object.h:158
 
#define IMPLEMENT_LOG4CXX_OBJECT(object)
Definition: object.h:66
 
#define END_LOG4CXX_CAST_MAP()
Definition: object.h:152
 
#define DECLARE_LOG4CXX_OBJECT(object)
Definition: object.h:43
 
#define LOG4CXX_CAST_ENTRY_CHAIN(Interface)
Definition: object.h:164
 
#define BEGIN_LOG4CXX_CAST_MAP()
Definition: object.h:146