summaryrefslogtreecommitdiff
path: root/ext/Log4Qt/src/dailyrollingfileappender.cpp
diff options
context:
space:
mode:
authorTomasz Sterna <tomek@xiaoka.com>2014-07-14 17:19:45 +0200
committerTomasz Sterna <tomek@xiaoka.com>2014-07-16 00:07:28 +0200
commit3c19406ee292e0ed7993bd4d3976cc34d40e2f22 (patch)
tree67d185e95d647e56c074f4b3a30ac4f0d81e2ee6 /ext/Log4Qt/src/dailyrollingfileappender.cpp
parent630cc2e3097f2236a4c1191be6c955ec523d6f1a (diff)
Replaced ext/Log4Qt source with submodule
Diffstat (limited to 'ext/Log4Qt/src/dailyrollingfileappender.cpp')
-rwxr-xr-xext/Log4Qt/src/dailyrollingfileappender.cpp352
1 files changed, 0 insertions, 352 deletions
diff --git a/ext/Log4Qt/src/dailyrollingfileappender.cpp b/ext/Log4Qt/src/dailyrollingfileappender.cpp
deleted file mode 100755
index a385d10..0000000
--- a/ext/Log4Qt/src/dailyrollingfileappender.cpp
+++ /dev/null
@@ -1,352 +0,0 @@
-/******************************************************************************
- *
- * package:
- * file: dailyrollingfileappender.cpp
- * created: September 2007
- * author: Martin Heinrich
- *
- *
- * Copyright 2007 Martin Heinrich
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- ******************************************************************************/
-
-
-
-/******************************************************************************
- * Dependencies
- ******************************************************************************/
-
-
-#include "dailyrollingfileappender.h"
-
-#include <QtCore/QDebug>
-#include <QtCore/QFile>
-#include <QtCore/QMetaEnum>
-#include <QtCore/QTextCodec>
-#include "helpers/datetime.h"
-#include "layout.h"
-#include "loggingevent.h"
-
-
-
-namespace Log4Qt
-{
-
-
- /**************************************************************************
- * Declarations
- **************************************************************************/
-
-
-
- /**************************************************************************
- * C helper functions
- **************************************************************************/
-
-
-
- /**************************************************************************
- * Class implementation: DailyRollingFileAppender
- **************************************************************************/
-
-
- DailyRollingFileAppender::DailyRollingFileAppender(QObject *pParent) :
- FileAppender(pParent),
- mDatePattern()
- {
- setDatePattern(DAILY_ROLLOVER);
- }
-
-
- DailyRollingFileAppender::DailyRollingFileAppender(Layout *pLayout,
- const QString &rFileName,
- const QString &rDatePattern,
- QObject *pParent) :
- FileAppender(pLayout, rFileName, pParent),
- mDatePattern()
- {
- setDatePattern(rDatePattern);
- }
-
-
- DailyRollingFileAppender::~DailyRollingFileAppender()
- {
- close();
- }
-
-
- void DailyRollingFileAppender::setDatePattern(DatePattern datePattern)
- {
- switch (datePattern)
- {
- case MINUTELY_ROLLOVER:
- setDatePattern(QLatin1String("'.'yyyy-MM-dd-hh-mm"));
- break;
- case HOURLY_ROLLOVER:
- setDatePattern(QLatin1String("'.'yyyy-MM-dd-hh"));
- break;
- case HALFDAILY_ROLLOVER:
- setDatePattern(QLatin1String("'.'yyyy-MM-dd-a"));
- break;
- case DAILY_ROLLOVER:
- setDatePattern(QLatin1String("'.'yyyy-MM-dd"));
- break;
- case WEEKLY_ROLLOVER:
- setDatePattern(QLatin1String("'.'yyyy-ww"));
- break;
- case MONTHLY_ROLLOVER:
- setDatePattern(QLatin1String("'.'yyyy-MM"));
- break;
- default:
- Q_ASSERT_X(false, "DailyRollingFileAppender::setDatePattern()", "Invalid datePattern constant");
- setDatePattern(DAILY_ROLLOVER);
- };
- }
-
-
- void DailyRollingFileAppender::activateOptions()
- {
- QMutexLocker locker(&mObjectGuard);
-
- computeFrequency();
- if (!mActiveDatePattern.isEmpty())
- {
- computeRollOverTime();
- FileAppender::activateOptions();
- }
- }
-
-
- void DailyRollingFileAppender::append(const LoggingEvent &rEvent)
- {
- // Q_ASSERT_X(, "DailyRollingFileAppender::append()", "Lock must be held by caller")
-
- if (QDateTime::currentDateTime() > mRollOverTime)
- rollOver();
- FileAppender::append(rEvent);
- }
-
-
- bool DailyRollingFileAppender::checkEntryConditions() const
- {
- // Q_ASSERT_X(, "DailyRollingFileAppender::checkEntryConditions()", "Lock must be held by caller")
-
- if (mActiveDatePattern.isEmpty())
- {
- LogError e = LOG4QT_QCLASS_ERROR(QT_TR_NOOP("Use of appender '%1' without having a valid date pattern set"),
- APPENDER_USE_INVALID_PATTERN_ERROR);
- e << name();
- logger()->error(e);
- return false;
- }
-
- return FileAppender::checkEntryConditions();
- }
-
-
-#ifndef QT_NO_DEBUG_STREAM
- QDebug DailyRollingFileAppender::debug(QDebug &rDebug) const
- {
- QString layout_name;
- if (layout())
- layout_name = layout()->name();
- QString codec_name;
- if (encoding())
- codec_name = QLatin1String(encoding()->name());
-
- rDebug.nospace() << "DailyRollingFileAppender("
- << "name:" << name() << " "
- << "activedatepattern:" << mActiveDatePattern << " "
- << "appendfile:" << appendFile() << " "
- << "bufferedio:" << bufferedIo() << " "
- << "datepattern:" << datePattern() << " "
- << "encoding:" << codec_name << " "
- << "frequency:" << frequencyToString() << " "
- << "file:" << file() << " "
- << "filter:" << firstFilter() << " "
- << "immediateflush:" << immediateFlush() << " "
- << "isactive:" << isActive() << " "
- << "isclosed:" << isClosed() << " "
- << "layout:" << layout_name << " "
- << "referencecount:" << referenceCount() << " "
- << "rollovertime:" << mRollOverTime
- << "threshold:" << threshold().toString()
- << "writer:" << writer()
- << ")";
- return rDebug.space();
- }
-#endif // QT_NO_DEBUG_STREAM
-
-
- void DailyRollingFileAppender::computeFrequency()
- {
- // Q_ASSERT_X(, "DailyRollingFileAppender::computeFrequency()", "Lock must be held by caller")
-
- const DateTime start_time(QDate(1999, 1, 1), QTime(0, 0));
- const QString start_string = start_time.toString(mDatePattern);
- mActiveDatePattern.clear();
-
- if (start_string != static_cast<DateTime>(start_time.addSecs(60)).toString(mDatePattern))
- mFrequency = MINUTELY_ROLLOVER;
- else if (start_string != static_cast<DateTime>(start_time.addSecs(60 * 60)).toString(mDatePattern))
- mFrequency = HOURLY_ROLLOVER;
- else if (start_string != static_cast<DateTime>(start_time.addSecs(60 * 60 * 12)).toString(mDatePattern))
- mFrequency = HALFDAILY_ROLLOVER;
- else if (start_string != static_cast<DateTime>(start_time.addDays(1)).toString(mDatePattern))
- mFrequency = DAILY_ROLLOVER;
- else if (start_string != static_cast<DateTime>(start_time.addDays(7)).toString(mDatePattern))
- mFrequency = WEEKLY_ROLLOVER;
- else if (start_string != static_cast<DateTime>(start_time.addMonths(1)).toString(mDatePattern))
- mFrequency = MONTHLY_ROLLOVER;
- else
- {
- LogError e = LOG4QT_QCLASS_ERROR(QT_TR_NOOP("The pattern '%1' does not specify a frequency for appender '%2'"),
- APPENDER_INVALID_PATTERN_ERROR);
- e << mDatePattern << name();
- logger()->error(e);
- return;
- }
-
- mActiveDatePattern = mDatePattern;
- logger()->trace("Frequency set to %2 using date pattern %1",
- mActiveDatePattern,
- frequencyToString());
- }
-
-
- void DailyRollingFileAppender::computeRollOverTime()
- {
- // Q_ASSERT_X(, "DailyRollingFileAppender::computeRollOverTime()", "Lock must be held by caller")
- Q_ASSERT_X(!mActiveDatePattern.isEmpty(), "DailyRollingFileAppender::computeRollOverTime()", "No active date pattern");
-
- QDateTime now = QDateTime::currentDateTime();
- QDate now_date = now.date();
- QTime now_time = now.time();
- QDateTime start;
-
- switch (mFrequency)
- {
- case MINUTELY_ROLLOVER:
- {
- start = QDateTime(now_date,
- QTime(now_time.hour(),
- now_time.minute(),
- 0, 0));
- mRollOverTime = start.addSecs(60);
- }
- break;
- case HOURLY_ROLLOVER:
- {
- start = QDateTime(now_date,
- QTime(now_time.hour(),
- 0, 0, 0));
- mRollOverTime = start.addSecs(60*60);
- }
- break;
- case HALFDAILY_ROLLOVER:
- {
- int hour = now_time.hour();
- if (hour >= 12)
- hour = 12;
- else
- hour = 0;
- start = QDateTime(now_date,
- QTime(hour, 0, 0, 0));
- mRollOverTime = start.addSecs(60*60*12);
- }
- break;
- case DAILY_ROLLOVER:
- {
- start = QDateTime(now_date,
- QTime(0, 0, 0, 0));
- mRollOverTime = start.addDays(1);
- }
- break;
- case WEEKLY_ROLLOVER:
- {
- // QT numbers the week days 1..7. The week starts on Monday.
- // Change it to being numbered 0..6, starting with Sunday.
- int day = now_date.dayOfWeek();
- if (day == Qt::Sunday)
- day = 0;
- start = QDateTime(now_date,
- QTime(0, 0, 0, 0)).addDays(-1 * day);
- mRollOverTime = start.addDays(7);
- }
- break;
- case MONTHLY_ROLLOVER:
- {
- start = QDateTime(QDate(now_date.year(),
- now_date.month(),
- 1),
- QTime(0, 0, 0, 0));
- mRollOverTime = start.addMonths(1);
- }
- break;
- default:
- Q_ASSERT_X(false, "DailyRollingFileAppender::computeInterval()", "Invalid datePattern constant");
- mRollOverTime = QDateTime::fromTime_t(0);
- }
-
- mRollOverSuffix = static_cast<DateTime>(start).toString(mActiveDatePattern);
- Q_ASSERT_X(static_cast<DateTime>(now).toString(mActiveDatePattern) == mRollOverSuffix,
- "DailyRollingFileAppender::computeRollOverTime()", "File name changes within interval");
- Q_ASSERT_X(mRollOverSuffix != static_cast<DateTime>(mRollOverTime).toString(mActiveDatePattern),
- "DailyRollingFileAppender::computeRollOverTime()", "File name does not change with rollover");
-
- logger()->trace("Computing roll over time from %1: The interval start time is %2. The roll over time is %3",
- now,
- start,
- mRollOverTime);
- }
-
-
- QString DailyRollingFileAppender::frequencyToString() const
- {
- QMetaEnum meta_enum = metaObject()->enumerator(metaObject()->indexOfEnumerator("DatePattern"));
- return QLatin1String(meta_enum.valueToKey(mFrequency));
- }
-
-
- void DailyRollingFileAppender::rollOver()
- {
- // Q_ASSERT_X(, "DailyRollingFileAppender::rollOver()", "Lock must be held by caller")
- Q_ASSERT_X(!mActiveDatePattern.isEmpty(), "DailyRollingFileAppender::rollOver()", "No active date pattern");
-
- QString roll_over_suffix = mRollOverSuffix;
- computeRollOverTime();
- if (roll_over_suffix == mRollOverSuffix)
- return;
-
- closeFile();
-
- QString target_file_name = file() + roll_over_suffix;
- QFile f(target_file_name);
- if (f.exists() && !removeFile(f))
- return;
- f.setFileName(file());
- if (!renameFile(f, target_file_name))
- return;
- openFile();
- }
-
-
-
- /**************************************************************************
- * Implementation: Operators, Helper
- **************************************************************************/
-
-
-} // namespace Log4Qt