Browse Source

[1622] use from-property ctor for RollingFileAppender so we can set UseLockFile

if the underlying log4cplus supports internal lock file, this solves the
race of simultaneous rollover from multiple processes.
this should be a compatible change and shouldn't disrupt log4cplus 1.0.4.
JINMEI Tatuya 12 years ago
parent
commit
d4389a32b0
1 changed files with 13 additions and 3 deletions
  1. 13 3
      src/lib/log/logger_manager_impl.cc

+ 13 - 3
src/lib/log/logger_manager_impl.cc

@@ -35,7 +35,10 @@
 #include <log/logger_specification.h>
 #include <log/buffer_appender_impl.h>
 
+#include <boost/lexical_cast.hpp>
+
 using namespace std;
+using boost::lexical_cast;
 
 namespace isc {
 namespace log {
@@ -123,7 +126,7 @@ LoggerManagerImpl::createConsoleAppender(log4cplus::Logger& logger,
 // a standard file appender or a rolling file appender will be created.
 void
 LoggerManagerImpl::createFileAppender(log4cplus::Logger& logger,
-                                         const OutputOption& opt)
+                                      const OutputOption& opt)
 {
     // Append to existing file
     std::ios::openmode mode = std::ios::app;
@@ -133,9 +136,16 @@ LoggerManagerImpl::createFileAppender(log4cplus::Logger& logger,
         fileapp = log4cplus::SharedAppenderPtr(new log4cplus::FileAppender(
             opt.filename, mode, opt.flush));
     } else {
+        log4cplus::helpers::Properties properties;
+        properties.setProperty("File", opt.filename);
+        properties.setProperty("MaxFileSize",
+                               lexical_cast<string>(opt.maxsize));
+        properties.setProperty("MaxBackupIndex",
+                               lexical_cast<string>(opt.maxver));
+        properties.setProperty("ImmediateFlush", "true");
+        properties.setProperty("UseLockFile", "true");
         fileapp = log4cplus::SharedAppenderPtr(
-            new log4cplus::RollingFileAppender(opt.filename, opt.maxsize,
-                                               opt.maxver, opt.flush));
+            new log4cplus::RollingFileAppender(properties));
     }
 
     // use the same console layout for the files.