diff options
Diffstat (limited to 'utils/rbutilqt/logger/src/FileAppender.cpp')
-rw-r--r-- | utils/rbutilqt/logger/src/FileAppender.cpp | 116 |
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. | ||
28 | FileAppender::FileAppender(const QString& fileName) | ||
29 | { | ||
30 | setFileName(fileName); | ||
31 | } | ||
32 | |||
33 | |||
34 | FileAppender::~FileAppender() | ||
35 | { | ||
36 | closeFile(); | ||
37 | } | ||
38 | |||
39 | |||
40 | //! Returns the name set by setFileName() or to the FileAppender constructor. | ||
41 | /** | ||
42 | * \sa setFileName() | ||
43 | */ | ||
44 | QString 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 | */ | ||
55 | void 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 | |||
68 | bool FileAppender::reopenFile() | ||
69 | { | ||
70 | closeFile(); | ||
71 | return openFile(); | ||
72 | } | ||
73 | |||
74 | |||
75 | bool 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 | */ | ||
98 | void 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 | |||
112 | void FileAppender::closeFile() | ||
113 | { | ||
114 | QMutexLocker locker(&m_logFileMutex); | ||
115 | m_logFile.close(); | ||
116 | } | ||