Hello,

I made a patch that should create files (via FileOutputStream) only when a 
message is actually logged to the file (see the patch below).
What was bothering us was that we had plenty of empty logging files.
My questions are:

1.       Is this a good idea? And if yes would you be interested in integrating 
this patch?

2.       I have tests failing. How does one debug/run one test at a time? I'm 
more familiar to gtest, from what I see log4cxx uses something closer to 
cppunit.

Here are the failing tests (Linux 2.6.32-358.el6.x86_64 #1 SMP Tue Jan 29 
11:47:41 EST 2013 x86_64 x86_64 x86_64 GNU/Linux)

Failed Tests            Total   Fail    Failed %

===================================================

hierarchythresholdtestcase                  8      1     12.50%

manualrollingtest                   4      1     25.00%

sizebasedrollingtest                6      1     16.67%

timebasedrollingtest                6      6    100.00%


Thanks in advance,

Cosmin


==== 
//depot/v3.1.build.dev.29464.nodryrun/thirdparty/apache-log4cxx-0.10.0/src/src/main/cpp/fileoutputstream.cpp#1
 - 
/src/new/v3.1.build.dev.29464.nodryrun/thirdparty/apache-log4cxx-0.10.0/src/src/main/cpp/fileoutputstream.cpp
 ====
***************
*** 31,43 ****

  IMPLEMENT_LOG4CXX_OBJECT(FileOutputStream)

  FileOutputStream::FileOutputStream(const LogString& filename,
!     bool append) : pool(), fileptr(open(filename, append, pool)) {
  }

  FileOutputStream::FileOutputStream(const logchar* filename,
!     bool append) : pool(), fileptr(open(filename, append, pool)) {
  }

  apr_file_t* FileOutputStream::open(const LogString& filename,
      bool append, Pool& pool) {
--- 31,45 ----

  IMPLEMENT_LOG4CXX_OBJECT(FileOutputStream)

  FileOutputStream::FileOutputStream(const LogString& filename,
!     bool append) : pool(), fileptr(NULL), logappend(append) {
!   logfilename = filename;
  }

  FileOutputStream::FileOutputStream(const logchar* filename,
!     bool append) : pool(), fileptr(NULL), logappend(append) {
!   logfilename = filename;
  }

  apr_file_t* FileOutputStream::open(const LogString& filename,
      bool append, Pool& pool) {
***************
*** 60,67 ****
--- 62,70 ----

  FileOutputStream::~FileOutputStream() {
    if (fileptr != NULL && !APRInitializer::isDestructed) {
      apr_file_close(fileptr);
+     fileptr = NULL;
    }
  }

  void FileOutputStream::close(Pool& /* p */) {
***************
*** 78,85 ****
--- 81,91 ----
  }

  void FileOutputStream::write(ByteBuffer& buf, Pool& /* p */ ) {
    if (fileptr == NULL) {
+      fileptr = open(logfilename, logappend, pool);
+   }
+   if (fileptr == NULL) {
       throw IOException(-1);
    }
    size_t nbytes = buf.remaining();
    size_t pos = buf.position();
==== 
//depot/v3.1.build.dev.29464.nodryrun/thirdparty/apache-log4cxx-0.10.0/src/src/main/include/log4cxx/helpers/fileoutputstream.h#1
 - 
/src/new/v3.1.build.dev.29464.nodryrun/thirdparty/apache-log4cxx-0.10.0/src/src/main/include/log4cxx/helpers/fileoutputstream.h
 ====
***************
*** 35,42 ****
--- 35,44 ----
            {
            private:
                    Pool pool;
                    apr_file_t* fileptr;
+                   LogString logfilename;
+                   bool logappend;

            public:
                    DECLARE_ABSTRACT_LOG4CXX_OBJECT(FileOutputStream)
                    BEGIN_LOG4CXX_CAST_MAP()
*******************************

This e-mail contains information for the intended recipient only. It may 
contain proprietary material or confidential information. If you are not the 
intended recipient you are not authorised to distribute, copy or use this 
e-mail or any attachment to it. Murex cannot guarantee that it is virus free 
and accepts no responsibility for any loss or damage arising from its use. If 
you have received this e-mail in error please notify immediately the sender and 
delete the original email received, any attachments and all copies from your 
system.

Reply via email to