TLogger *TLoggerFactory::create(const QString &key) { QMutexLocker locker(&mutex); loadPlugins(); TLogger *logger = 0; QString k = key.toLower(); if (k == TFileLogger().key().toLower()) { logger = new TFileLogger; } else { for (QListIterator<TLoggerInterface *> i(*ssifs); i.hasNext(); ) { TLoggerInterface *lif = i.next(); if (lif->keys().contains(k)) { logger = lif->create(k); break; } } } return logger; }
/*! Creates and returns a TLogger object that matches the given key, or returns 0 if no matching logger is found. */ TLogger *TLoggerFactory::create(const QString &key) { const QString FILE_KEY = TFileLogger().key().toLower(); QMutexLocker locker(&mutex); loadPlugins(); TLogger *logger = 0; QString k = key.toLower(); if (k == FILE_KEY) { logger = new TFileLogger; } else { TLoggerInterface *lggif = lggIfMap->value(k); if (lggif) { logger = lggif->create(key); } } return logger; }
void TLoggerFactory::loadPlugins() { if (!lggIfMap) { lggIfMap = new QMap<QString, TLoggerInterface *>(); qAddPostRoutine(::cleanup); QDir dir(Tf::app()->pluginPath()); QStringList list = dir.entryList(QDir::Files); for (QStringListIterator i(list); i.hasNext(); ) { QPluginLoader loader(dir.absoluteFilePath(i.next())); tSystemDebug("plugin library for logger: %s", qPrintable(loader.fileName())); if (!loader.load()) { tSystemError("plugin load error: %s", qPrintable(loader.errorString())); continue; } TLoggerInterface *iface = qobject_cast<TLoggerInterface *>(loader.instance()); if ( iface ) { #if QT_VERSION >= 0x050000 QVariantList array = loader.metaData().value("MetaData").toObject().value("Keys").toArray().toVariantList(); for (QListIterator<QVariant> it(array); it.hasNext(); ) { QString key = it.next().toString().toLower(); tSystemInfo("Loaded logger plugin: %s", qPrintable(key)); lggIfMap->insert(key, iface); } #else QStringList keys = iface->keys(); for (QStringListIterator j(keys); j.hasNext(); ) { QString key = j.next().toLower(); tSystemInfo("Loaded logger plugin: %s", qPrintable(key)); lggIfMap->insert(key, iface); } #endif } } } }