IdsaAppender.cpp
Go to the documentation of this file.
00001 /*
00002  * IdsaAppender.cpp
00003  *
00004  * Copyright 2000, Marc Welz
00005  *
00006  * See the COPYING file for the terms of usage and distribution.
00007  */
00008 
00009 #include "PortabilityImpl.hh"
00010 
00011 #ifdef LOG4CPP_HAVE_LIBIDSA
00012 
00013 #include <unistd.h>
00014 #include <sys/types.h>
00015 #include <sys/stat.h>
00016 #include <fcntl.h>
00017 #include <log4cpp/IdsaAppender.hh>
00018 #include <log4cpp/FactoryParams.hh>
00019 #include <memory>
00020 
00021 namespace log4cpp {
00022 
00023     IdsaAppender::IdsaAppender(const std::string& name, 
00024                                const std::string& idsaName) :
00025         AppenderSkeleton(name),
00026         _idsaName(idsaName)
00027     {
00028         _idsaConnection=NULL;
00029         open();
00030     }
00031     
00032     IdsaAppender::~IdsaAppender() {
00033         close();
00034     }
00035 
00036     void IdsaAppender::open() {
00037         _idsaConnection=idsa_open((char *)_idsaName.c_str(), NULL,
00038                                   IDSA_F_FAILOPEN);
00039     }
00040 
00041     void IdsaAppender::close() {
00042         idsa_close(_idsaConnection);
00043         _idsaConnection=NULL;
00044     }
00045 
00046     void IdsaAppender::_append(const LoggingEvent& event) {
00047         IDSA_EVENT *idsaEvent;
00048         
00049         idsaEvent = idsa_event(_idsaConnection);
00050         
00051         if (idsaEvent){
00052             
00053             idsa_name(idsaEvent,(char *)event.categoryName.c_str());
00054             idsa_scheme(idsaEvent,"log4cpp");
00055             
00056             idsa_add_integer(idsaEvent, "priority", event.priority);
00057             idsa_add_string(idsaEvent, "ndc", (char *)event.ndc.c_str());
00058             idsa_add_string(idsaEvent, "message", 
00059                             (char*)event.message.c_str());
00060             
00061             idsa_log(_idsaConnection,idsaEvent);
00062             // idsa_log does its own deallocation */
00063         }
00064     }
00065 
00066     bool IdsaAppender::reopen() {
00067         close();
00068         open();
00069         return true;
00070     }      
00071 
00072     bool IdsaAppender::requiresLayout() const {
00073         return false;
00074     }
00075 
00076     void IdsaAppender::setLayout(Layout* layout) {
00077         return;
00078     }
00079 
00080     std::auto_ptr<Appender> create_idsa_appender(const FactoryParams& params)
00081     {
00082        std::string name, idsa_name;
00083        params.get_for("idsa appender").required("name", name)("idsa_name", idsa_name);
00084 
00085        return std::auto_ptr<Appender>(new IdsaAppender(name, idsa_name));
00086     }
00087 }
00088 
00089 #endif // LOG4CPP_HAVE_LIBIDSA


log4cpp
Author(s): Stephen Roderick, Bastiaan Bakker, Cedric Le Goater, Steve Ostlind, Marcel Harkema, Walter Stroebel, Glenn Scott and Tony Cheung.
autogenerated on Wed Sep 16 2015 10:27:14