annotate Utils/LogFile.cpp @ 4:e30f00f760d3 default tip

Cleanup OSTC label and removed url The computer type will now show OSTC 4/5 instead of only 4. The url has been removed because it is no longer maintained. The ui header have been deleted because they are generated files shich should not be under version controll. Delete locally if you want to force an update of the dialog layout.
author Ideenmodellierer
date Sun, 30 Nov 2025 18:37:32 +0100
parents 0b3630a29ad8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
1 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
2 /// \file LogFile.cpp
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
3 /// \brief Put Log message into a log file.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
4 /// \author JD Gascuel.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
5 /// \copyright (c) 2011-2016 JD Gascuel. All rights reserved.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
6 /// $Id$
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
7 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
8 //
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
9 // BSD 2-Clause License:
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
10 //
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
11 // Redistribution and use in source and binary forms, with or without
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
12 // modification, are permitted provided that the following conditions
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
13 // are met:
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
14 //
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
15 // 1. Redistributions of source code must retain the above copyright notice,
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
16 // this list of conditions and the following disclaimer.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
17 //
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
18 // 2. Redistributions in binary form must reproduce the above copyright notice,
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
19 // this list of conditions and the following disclaimer in the documentation
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
20 // and/or other materials provided with the distribution.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
21 //
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
22 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
23 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
24 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
25 // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
26 // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
27 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
28 // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
29 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
30 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
31 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
32 // THE POSSIBILITY OF SUCH DAMAGE.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
33 //
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
34 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
35
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
36 #include "Utils/LogFile.h"
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
37
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
38 #include <QCoreApplication>
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
39 #include <QDir>
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
40 #include <QMutex>
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
41 #include <QSettings>
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
42 #include <QRegularExpression>
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
43
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
44 #ifndef WIN32
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
45 # include <sys/stat.h> // umask
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
46 #else
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
47 # include <io.h> // umask
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
48 #endif
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
49
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
50 static QMutex mutex;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
51
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
52 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
53
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
54 LogFile::LogFile(int argc, char *argv[])
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
55 : LogAppender(argc, argv),
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
56 _holdFiles(5),
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
57 _fileNameFormat("%a-%n.txt"),
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
58 _logFile(NULL)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
59 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
60 setMinLevel(defaultMinLevel());
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
61 for(int i=1; i<argc; ++i)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
62 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
63 if( strcmp("-dd", argv[i]) == 0 )
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
64 setMinLevel(Log::LEVEL_DEBUG);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
65 else if( strcmp("-d", argv[i]) == 0 )
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
66 setMinLevel(Log::LEVEL_TRACE);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
67 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
68 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
69
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
70 LogFile::~LogFile()
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
71 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
72 if( _logFile )
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
73 fclose(_logFile);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
74 _logFile = NULL;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
75 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
76
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
77 const char *LogFile::type() const
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
78 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
79 return "File";
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
80 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
81
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
82 Log::Level LogFile::defaultMinLevel() const
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
83 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
84 return Log::LEVEL_TRACE;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
85 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
86
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
87
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
88 const char* LogFile::defaultFormat() const
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
89 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
90 return "[%d %t] %o %F:%l: %m";
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
91 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
92
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
93 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
94
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
95 QString LogFile::filePath(bool pattern) const
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
96 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
97 QString path =
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
98 #ifdef Q_OS_MAC
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
99 QString("/tmp")
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
100 #else
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
101 QDir::tempPath()
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
102 #endif
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
103 + "/"
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
104 + _fileNameFormat;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
105 path.replace("%n", pattern ? "*" : "001")
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
106 .replace("%a", Log::applicationName());
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
107 return path;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
108 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
109
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
110 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
111
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
112 void LogFile::cleanup()
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
113 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
114 QString name = filePath(true);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
115 QDir dir(name.section('/', 0, -2));
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
116 name = name.section('/', -1);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
117
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
118 // ---- Make sure the directory exists, and is writable by everyone.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
119 int oldUMask = umask(0);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
120 if( ! dir.exists() )
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
121 QDir::current().mkdir( dir.absolutePath() );
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
122
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
123 // ---- Then perform the cleanup, if necessary
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
124 QFileInfoList list = dir.entryInfoList(QStringList(name), QDir::Files, QDir::Name | QDir::Reversed);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
125 // QRegExp parse(name.replace("*", "([0-9]+)"));
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
126 QRegularExpression parse(name.replace("*", "([0-9]+)"));
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
127
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
128 for(int i=0; i<list.count(); ++i)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
129 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
130 QString log = list[i].fileName();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
131 #if 0
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
132 if( parse.exactMatch(log) )
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
133 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
134 int num = parse.cap(1).toInt();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
135 if( num >= _holdFiles )
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
136 dir.remove(log);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
137 else
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
138 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
139 QString newName = _fileNameFormat;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
140 newName.replace("%n", QString().sprintf("%03d", num+1))
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
141 .replace("%a", Log::applicationName());
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
142 dir.rename(log, newName);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
143 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
144 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
145 #endif
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
146 QRegularExpressionMatch match = parse.match(log); // match erzeugen
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
147 if (match.hasMatch()) // entspricht exactMatch
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
148 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
149 int num = match.captured(1).toInt(); // entspricht cap(1)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
150
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
151 if (num >= _holdFiles)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
152 dir.remove(log);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
153 else
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
154 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
155 QString newName = _fileNameFormat;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
156 // newName.replace("%n", QString().sprintf("%03d", num+1))
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
157 // .replace("%a", Log::applicationName());
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
158 QString number = QString::number(num + 1).rightJustified(3, '0');
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
159 newName.replace("%n", number)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
160 .replace("%a", Log::applicationName());
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
161 dir.rename(log, newName);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
162 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
163 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
164 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
165
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
166 umask(oldUMask);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
167 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
168
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
169 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
170
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
171 void LogFile::operator()(const Log &log)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
172 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
173 // stdio FILE is not reentrant. So a lock here is mandatory.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
174 QMutexLocker locker(&mutex);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
175
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
176 //---- Open the current log file -----------------------------------------
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
177 if( ! _logFile )
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
178 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
179 //---- Clean old log files
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
180 cleanup();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
181 //---- Then open the new one.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
182 QString name = filePath();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
183 _logFile = fopen(name.toLocal8Bit().constData(), "at+");
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
184 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
185
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
186 //---- Output log line ---------------------------------------------------
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
187 if( _logFile ) // File open succeded ?
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
188 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
189 QString line = format(log);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
190 fprintf(_logFile, "%s\n", line.toUtf8().constData());
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
191 fflush(_logFile);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
192 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
193 }