summaryrefslogtreecommitdiff
path: root/utils/rbutilqt/logger/src/FileAppender.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'utils/rbutilqt/logger/src/FileAppender.cpp')
-rw-r--r--utils/rbutilqt/logger/src/FileAppender.cpp116
1 files changed, 116 insertions, 0 deletions
diff --git a/utils/rbutilqt/logger/src/FileAppender.cpp b/utils/rbutilqt/logger/src/FileAppender.cpp
new file mode 100644
index 0000000000..b9018b0324
--- /dev/null
+++ b/utils/rbutilqt/logger/src/FileAppender.cpp
@@ -0,0 +1,116 @@
1/*
2 Copyright (c) 2010 Boris Moiseev (cyberbobs at gmail dot com)
3
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU Lesser General Public License version 2.1
6 as published by the Free Software Foundation and appearing in the file
7 LICENSE.LGPL included in the packaging of this file.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU Lesser General Public License for more details.
13*/
14// Local
15#include "FileAppender.h"
16
17// STL
18#include <iostream>
19
20/**
21 * \class FileAppender
22 *
23 * \brief Simple appender that writes the log records to the plain text file.
24 */
25
26
27//! Constructs the new file appender assigned to file with the given name.
28FileAppender::FileAppender(const QString& fileName)
29{
30 setFileName(fileName);
31}
32
33
34FileAppender::~FileAppender()
35{
36 closeFile();
37}
38
39
40//! Returns the name set by setFileName() or to the FileAppender constructor.
41/**
42 * \sa setFileName()
43 */
44QString FileAppender::fileName() const
45{
46 QMutexLocker locker(&m_logFileMutex);
47 return m_logFile.fileName();
48}
49
50
51//! Sets the name of the file. The name can have no path, a relative path, or an absolute path.
52/**
53 * \sa fileName()
54 */
55void FileAppender::setFileName(const QString& s)
56{
57 if (s.isEmpty())
58 std::cerr << "<FileAppender::FileAppender> File name is empty. The appender will do nothing" << std::endl;
59
60 QMutexLocker locker(&m_logFileMutex);
61 if (m_logFile.isOpen())
62 m_logFile.close();
63
64 m_logFile.setFileName(s);
65}
66
67
68bool FileAppender::reopenFile()
69{
70 closeFile();
71 return openFile();
72}
73
74
75bool FileAppender::openFile()
76{
77 if (m_logFile.fileName().isEmpty())
78 return false;
79
80 bool isOpen = m_logFile.isOpen();
81 if (!isOpen)
82 {
83 isOpen = m_logFile.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text);
84 if (isOpen)
85 m_logStream.setDevice(&m_logFile);
86 else
87 std::cerr << "<FileAppender::append> Cannot open the log file " << qPrintable(m_logFile.fileName()) << std::endl;
88 }
89 return isOpen;
90}
91
92
93//! Write the log record to the file.
94/**
95 * \sa fileName()
96 * \sa AbstractStringAppender::format()
97 */
98void FileAppender::append(const QDateTime& timeStamp, Logger::LogLevel logLevel, const char* file, int line,
99 const char* function, const QString& category, const QString& message)
100{
101 QMutexLocker locker(&m_logFileMutex);
102
103 if (openFile())
104 {
105 m_logStream << formattedString(timeStamp, logLevel, file, line, function, category, message);
106 m_logStream.flush();
107 m_logFile.flush();
108 }
109}
110
111
112void FileAppender::closeFile()
113{
114 QMutexLocker locker(&m_logFileMutex);
115 m_logFile.close();
116}