Hello,

In RE to my email yesterday about the syslog functionality of log4cxx not working on Mac OS X (10.4.3):

My system has the "syslog.h" header for syslogd logging functionality, and subsequently upon looking for the code, there're some tests for this file:

Using the latest 0.9.8 source the precompiler directive "LOG4CXX_HAVE_SYSLOG" is initially defined in the "include/log4cxx/ private/log4cxx_private.h" header file, however the header file cannot be included in other source without "-DLOG4CXX_TEST" or "- DLOG4CXX" being added to the compiler options, else the following message shows up:

---
#error "log4cxx/private/log4cxx_private.h should only be used within log4cxx implementation or tests"
---

By implementation, does that mean 'whenever I'd like to use log4cxx'? Otherwise, the following block in syslogappender.cpp, which actually invokes the syslog() function doesn't get entered...

---
<syslogappender.cpp>
    261 #ifdef LOG4CXX_HAVE_SYSLOG
    262         if (sw == 0)
    263         {
    264                 std::string sbuf;
    265                 Transcoder::encode(msg, sbuf);
    266
    267                 // use of "%s" to avoid a security hole
268 ::syslog(syslogFacility | event->getLevel()- >getSyslogEquivalent(),
    269                         "%s", sbuf.c_str());
    270
    271                 return;
    272         }
    273 #endif
---

As a stopgap, I "#define LOG4CXX 1", and "#include <log4cxx/private/ log4cxx_private.h>" in the "syslogappender.h" header file before the "LOG4CXX_HAVE_SYSLOG" precompiler variable gets checked. I'm assuming there's either something wrong in the way I'm doing things, or there's something wrong in the header files.

Thanks!
-lev

Reply via email to