diff options
author | Subv <s.v.h21@hotmail.com> | 2012-08-22 17:26:53 -0500 |
---|---|---|
committer | Subv <s.v.h21@hotmail.com> | 2012-08-22 17:26:53 -0500 |
commit | dc95ce61b46ce2d542ee4c4dbdf35a9e854c4316 (patch) | |
tree | e673101dc6554a76dfacb5cf3497dd1d2bde4f41 /src/server/shared/Logging/AppenderFile.cpp | |
parent | cecaab7948d5289439d1334d7bedcaae90e1fe3a (diff) | |
parent | 85ed0e32a9b2b029c1db3cf1a914b3940cf72b9b (diff) |
Merge branch 'master' of github.com:TrinityCore/TrinityCore into mmaps
Conflicts:
dep/PackageList.txt
src/server/game/Movement/MotionMaster.cpp
src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp
src/server/game/Movement/MovementGenerators/PointMovementGenerator.h
src/server/game/Movement/Spline/MoveSplineInit.h
src/server/game/World/World.h
Diffstat (limited to 'src/server/shared/Logging/AppenderFile.cpp')
-rw-r--r-- | src/server/shared/Logging/AppenderFile.cpp | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/src/server/shared/Logging/AppenderFile.cpp b/src/server/shared/Logging/AppenderFile.cpp new file mode 100644 index 00000000000..67adff39aae --- /dev/null +++ b/src/server/shared/Logging/AppenderFile.cpp @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "AppenderFile.h" +#include "Common.h" + +AppenderFile::AppenderFile(uint8 id, std::string const& name, LogLevel level, const char* _filename, const char* _logDir, const char* _mode, AppenderFlags _flags) + : Appender(id, name, APPENDER_FILE, level, _flags) + , filename(_filename) + , logDir(_logDir) + , mode(_mode) +{ + dynamicName = std::string::npos != filename.find("%s"); + backup = _flags & APPENDER_FLAGS_MAKE_FILE_BACKUP; + + logfile = !dynamicName ? OpenFile(_filename, _mode, backup) : NULL; +} + +AppenderFile::~AppenderFile() +{ + if (logfile) + { + fclose(logfile); + logfile = NULL; + } +} + +void AppenderFile::_write(LogMessage& message) +{ + if (dynamicName) + { + char namebuf[TRINITY_PATH_MAX]; + snprintf(namebuf, TRINITY_PATH_MAX, filename.c_str(), message.param1.c_str()); + logfile = OpenFile(namebuf, mode, backup); + } + + if (logfile) + { + fprintf(logfile, "%s%s", message.prefix.c_str(), message.text.c_str()); + fflush(logfile); + + if (dynamicName) + { + fclose(logfile); + logfile = NULL; + } + } +} + +FILE* AppenderFile::OpenFile(std::string const &filename, std::string const &mode, bool backup) +{ + if (mode == "w" && backup) + { + std::string newName(filename); + newName.push_back('.'); + newName.append(LogMessage::getTimeStr(time(NULL))); + rename(filename.c_str(), newName.c_str()); // no error handling... if we couldn't make a backup, just ignore + } + return fopen((logDir + filename).c_str(), mode.c_str()); +} |