diff options
Diffstat (limited to 'src/common/Logging/AppenderFile.cpp')
-rw-r--r-- | src/common/Logging/AppenderFile.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/common/Logging/AppenderFile.cpp b/src/common/Logging/AppenderFile.cpp index c3854ffc9f..134548b673 100644 --- a/src/common/Logging/AppenderFile.cpp +++ b/src/common/Logging/AppenderFile.cpp @@ -18,36 +18,50 @@ AppenderFile::AppenderFile(uint8 id, std::string const& name, LogLevel level, Ap _fileSize(0) { if (args.size() < 4) + { throw InvalidAppenderArgsException(Acore::StringFormat("Log::CreateAppenderFromConfig: Missing file name for appender %s", name.c_str())); + } _fileName.assign(args[3]); std::string mode = "a"; if (4 < args.size()) + { mode.assign(args[4]); + } if (flags & APPENDER_FLAGS_USE_TIMESTAMP) { size_t dot_pos = _fileName.find_last_of('.'); if (dot_pos != std::string::npos) + { _fileName.insert(dot_pos, sLog->GetLogsTimestamp()); + } else + { _fileName += sLog->GetLogsTimestamp(); + } } if (5 < args.size()) { if (Optional<uint32> size = Acore::StringTo<uint32>(args[5])) + { _maxFileSize = *size; + } else + { throw InvalidAppenderArgsException(Acore::StringFormat("Log::CreateAppenderFromConfig: Invalid size '%s' for appender %s", std::string(args[5]).c_str(), name.c_str())); + } } _dynamicName = std::string::npos != _fileName.find("%s"); _backup = (flags & APPENDER_FLAGS_MAKE_FILE_BACKUP) != 0; if (!_dynamicName) + { logfile = OpenFile(_fileName, mode, (mode == "w") && _backup); + } } AppenderFile::~AppenderFile() @@ -67,7 +81,9 @@ void AppenderFile::_write(LogMessage const* message) // always use "a" with dynamic name otherwise it could delete the log we wrote in last _write() call FILE* file = OpenFile(namebuf, "a", _backup || exceedMaxSize); if (!file) + { return; + } fprintf(file, "%s%s\n", message->prefix.c_str(), message->text.c_str()); fflush(file); @@ -77,10 +93,14 @@ void AppenderFile::_write(LogMessage const* message) return; } else if (exceedMaxSize) + { logfile = OpenFile(_fileName, "w", true); + } if (!logfile) + { return; + } fprintf(logfile, "%s%s\n", message->prefix.c_str(), message->text.c_str()); fflush(logfile); |