36#pragma warning(disable: 4127)
44#pragma warning(enable: 4127)
69Destinations::Destinations(QObject* parent) :
73 connect(&d->m_configFileWatcher,SIGNAL(fileChanged(QString)),
74 this,SLOT(configureFileChanged(QString)));
77Destinations::~Destinations()
87void Destinations::configureFileChanged (
const QString & path )
89 if (QFile(path).exists())
118 QFile file(fileName);
119 QFileInfo fileInfo(fileName);
120 QDir configDir = fileInfo.dir();
124 if (!file.open(QIODevice::ReadOnly))
126 std::cerr <<
"Destinations::configure Unable to open qslog configuration file: \""
127 << fileName.toStdString() <<
"\"" << std::endl;
133 LDEBUG <<
"Destinations::configure configuration file: \""
134 << fileName <<
"\" already configured";
143 QTextStream in(&file);
144 QString line = in.readLine();
145 while (!line.isNull())
147 if (!line.startsWith(
"#"))
149 QStringList elts = line.split(
"=");
150 if (elts.size()>0 && elts.at(0).trimmed().startsWith(
"log4j.appender."))
152 auto destination = elts.at(0).trimmed().split(
".").last();
155 value = elts.at(1).trimmed();
159 LDEBUG << fileName <<
"overwrites destination definition"
160 << destination <<
"from"
163 if (destination ==
"DebugOutput")
170 else if (destination ==
"File")
178 std::cerr <<
"Error reading \"" << fileName.toUtf8().constData()
179 <<
"\": unknown destination \""
180 << destination.toUtf8().constData()
185 else if (elts.size()==2 && elts.at(0).trimmed() ==
"include")
187 QString includedFileName = elts.at(1).trimmed();
188 QString includedInitFileName = includedFileName;
189 if (!QFileInfo(includedInitFileName).isAbsolute())
191 includedInitFileName = configDir.filePath(includedInitFileName);
196 line = in.readLine();
207 virtual void write(
const QString& message,
const QString& zone =
"")
override;
211 QTextStream mOutputStream;
217 mFile.setFileName(filePath);
218 mFile.open(QFile::WriteOnly|QFile::Append);
222 mOutputStream.setDevice(&mFile);
229 mOutputStream <<
" : " << zone <<
" : ";
230 mOutputStream << message <<
QTENDL;
231 mOutputStream.flush();
LimaFileSystemWatcher extends QFileSystemWatcher to work on replaced files
void addPath(const QString &path)
static void output(const QString &a_message)
virtual void write(const QString &message, const QString &zone=QLatin1String("")) override
static DestinationPtr MakeDebugOutputDestination()
static DestinationPtr MakeFileDestination(const QString &filePath)
QMap< QString, QString > m_destinationSources
Association destination name / file name. Allows to inform of overwrites.
QMap< QString, DestinationPtr > m_destinations
LimaFileSystemWatcher m_configFileWatcher
QStringList m_configuredFiles
Store the list of configuration files already loaded.
bool configure(const QString &fileName, bool reload=false)
const QMap< QString, DestinationPtr > & destinations() const
FileDestination(const QString &filePath)
virtual void write(const QString &message, const QString &zone="") override
std::shared_ptr< Destination > DestinationPtr