QLoggingCategory - get default rules?
-
Hey
How can I get default rules from qt loging ?
When I do something like this >
QLoggingCategory::setFilterRules("" "*.debug=true\n" "*.critical=true\n" "*.warning=true\n" "*.info=true\n" "");
I get a LOT more print than I usually get. So I'd like to see what other things gets logged so I can control it a little better.
TIA! -
@Dariusz That's what the QLoggingCategory::installFilter function lets you do.
#include <QApplication> #include <QLoggingCategory> #include <QLabel> #include <cstdio> QLoggingCategory::CategoryFilter oldFilter; void myCategoryFilter(QLoggingCategory *category) { printf("pre-filter %s: debug:%d info:%d warning:%d critical:%d\n", category->categoryName(), category->isDebugEnabled(), category->isInfoEnabled(), category->isWarningEnabled(), category->isCriticalEnabled()); if (oldFilter) { oldFilter(category); printf("post-filter %s: debug:%d info:%d warning:%d critical:%d\n", category->categoryName(), category->isDebugEnabled(), category->isInfoEnabled(), category->isWarningEnabled(), category->isCriticalEnabled()); } fflush(stdout); } int main(int argc, char *argv[]) { oldFilter = QLoggingCategory::installFilter(myCategoryFilter); // Use some Qt functionality to cause categories to be registered QApplication a(argc, argv); QLabel label("text"); label.show(); return a.exec(); }
Sample ouput:
pre-filter qt.qpa: debug:1 info:1 warning:1 critical:1 post-filter qt.qpa: debug:0 info:0 warning:1 critical:1 pre-filter qt.qpa.screen: debug:1 info:1 warning:1 critical:1 post-filter qt.qpa.screen: debug:0 info:0 warning:0 critical:1 pre-filter qt.accessibility.cache: debug:1 info:1 warning:1 critical:1 post-filter qt.accessibility.cache: debug:0 info:1 warning:1 critical:1 ...
-
QLoggingCategory::installFilter() looks like it can handle this.
For each category passed into the filter:
- Call
QLoggingCategory::isCriticalEnabled
,isDebugEnabled
, etc for the source code configuration. - Call the initially installed filter
- Call
isCriticalEnabled
, etc for the configuration file and environment variable configuration
- Call
-
I'm not sure I'm interpreting the thrust of the question correctly.
Nevertheless...
I think part of the question is how to basically figure out an exhaustive list of what is being enabled by using the snippet of code:
QLoggingCategory::setFilterRules("" "*.debug=true\n" "*.critical=true\n" "*.warning=true\n" "*.info=true\n" "");
As you said, it is indeed a LOT.
The first thing I thought of in terms of figuring out what the deluge consists of...
... I navigated to where I keep a copy of the source code to the whole Qt framework itself, and ran this:
# in a bash terminal: grep -rwh Q_LOGGING_CATEGORY | grep '"qt\.' | sort | uniq | awk -F\" '{print $2}' | sort | uniq
This produces a list of 230 logging categories internal to Qt itself.
However, even this list of 230 categories is not exhaustive, because I have not cloned 100% of the framework, but rather only certain modules (including
qtbase
,qtdeclarative
, and a handful of others).I will post the list in a separate message (right after this one). Hopefully the forum software will put scrollbars around it.
Because Qt is consistent in naming its categories with the prefix
qt.
, you can enable all of your own logging categories but none from Qt by doing something like this before launching the program:export QT_LOGGING_RULES="*=true;qt*=false;"
-
the output of my bash expression:
qt.accessibility.atspi qt.accessibility.atspi.creation qt.accessibility.cache qt.accessibility.core qt.bluetooth qt.bluetooth.android qt.bluetooth.bluez qt.bluetooth.ios qt.bluetooth.osx qt.bluetooth.qml qt.bluetooth.windows qt.bluetooth.winrt qt.bluetooth.winrt.service.thread qt.corecon qt.core.filesystemwatcher qt.corelib.tests.itemmodels qt.core.qabstractitemmodel.checkindex qt.core.qmetaobject.connectslotsbyname qt.core.socketnotifier_deprecation qt.distanceField qt.egl.xlib.debug qt.eventdispatcher qt.eventdispatcher.activity qt.eventdispatcher.timers qt.examples.imagegestures qt.examples.pdfviewer qt.gifrecorder qt.glx qt.gui.dnd qt.gui.drawhelper qt.gui.icc qt.gui.shortcutmap qt.gui.textureio qt.imageformat.pdf qt.labs.platform.dialogs qt.labs.platform.menus qt.labs.platform.tray qt.labs.settings qt.mm.camera qt.mm.videorender qt.modeltest qt.multimedia.alsa.output qt.multimedia.audioinput qt.multimedia.audiointerface qt.multimedia.audiooutput qt.multimedia.deviceinfo qt.multimedia.plugin qt.multimedia.plugins.android qt.multimedia.plugins.directshow qt.multimedia.plugins.directshow.renderfilter qt.multimedia.utils qt.multimedia.video qt.network.http2 qt.network.monitor qt.network.socket qt.network.socket.verbose qt.network.ssl qt.nfc.neard qt.opengl.diskcache qt.pdf.document qt.pdf.links qt.pdf.navigationstack qt.pdf.search qt.positioning.geoclue qt.positioning.geoclue2 qt.positioning.serialnmea qt.positioning.winrt qt.qdoc qt.qml.binding.removal qt.qml.diskcache qt.qml.gc.allocatorStats qt.qml.gc.statistics qt.qml.tablemodel qt.qpa qt.qpa.accessibility qt.qpa.application qt.qpa.backingstore qt.qpa.backingstore.iosurface qt.qpa.clipboard qt.qpa.cocoa.notifications qt.qpa.dialogs qt.qpa.drawing qt.qpa.egldeviceintegration qt.qpa.eglfs.kms qt.qpa.events qt.qpa.events.reader qt.qpa.fb qt.qpa.fonts qt.qpa.gl qt.qpa.glcontext qt.qpa.input qt.qpa.input.devices qt.qpa.input.events qt.qpa.input.gestures qt.qpa.input.keymap qt.qpa.input.methods qt.qpa.input.methods.serialize qt.qpa.input.mouse qt.qpa.input.tablet qt.qpa.input.touch qt.qpa.menu qt.qpa.menus qt.qpa.mime qt.qpa.openglcontext qt.qpa.peeker qt.qpa.plugin qt.qpa.screen qt.qpa.screen.updates qt.qpa.theme qt.qpa.tray qt.qpa.trayicon qt.qpa.tuio.bundle qt.qpa.tuio.handler qt.qpa.tuio.message qt.qpa.tuio.set qt.qpa.tuio.source qt.qpa.uiautomation qt.qpa.vnc qt.qpa.wayland qt.qpa.wayland.backingstore qt.qpa.wayland.input qt.qpa.window qt.qpa.windows qt.qpa.xcb qt.qpa.xdnd qt.qpa.xkeyboard qt.quick.boundaryrule qt.quick.canvas qt.quick.controls.control.itemmanagement qt.quick.controls.imagine qt.quick.controls.splitview qt.quick.controls.splitview.mouse qt.quick.controls.splitview.state qt.quick.controls.style qt.quick.controls.tools.testbench.assetfixer.brief qt.quick.controls.tools.testbench.assetfixer.verbose qt.quick.controls.tumbler qt.quick.controls.tumblerview qt.quick.dialogs.registration qt.quick.dialogs.window qt.quick.dirty qt.quick.focus qt.quick.gesture.target qt.quick.handler.active qt.quick.handler.dispatch qt.quick.handler.drag qt.quick.handler.grab qt.quick.handler.hover qt.quick.handler.parent qt.quick.handler.pinch qt.quick.handler.tap qt.quick.handler.wheel qt.quick.hover.trace qt.quick.image qt.quick.itemview.delegaterecycling qt.quick.itemview.lifecycle qt.quick.mouse qt.quick.mouse.target qt.quick.pathview qt.quick.pointer.events qt.quick.pointer.grab qt.quick.pointer.tests qt.quick.sharedimage qt.quick.tablet qt.quick.tableview.lifecycle qt.quick.tests qt.quick.touch qt.quick.touch.target qt.quick.wheel.target qt.quick.window.transient qt.rhi.general qt.scaling qt.scenegraph.general qt.scenegraph.info qt.scenegraph.renderloop qt.scenegraph.softwarecontext.abstractrenderer qt.scenegraph.softwarecontext.pixmapRenderer qt.scenegraph.softwarecontext.renderable qt.scenegraph.softwarecontext.renderer qt.scenegraph.textureio qt.scenegraph.time.compilation qt.scenegraph.time.glyph qt.scenegraph.time.renderer qt.scenegraph.time.renderloop qt.scenegraph.time.texture qt.shape.time.sync qt.speech.tts.android qt.speech.tts.flite qt.svg qt.svg.draw qt.test qt.text.browser qt.text.drawing qt.text.font.db qt.text.font.match qt.text.hittest qt.text.layout qt.text.layout.table qt.text.markdown qt.text.markdown.writer qt.text.tests qt.v4.asm qt.virtualkeyboard qt.virtualkeyboard.hunspell qt.virtualkeyboard.lipi qt.virtualkeyboard.myscript qt.virtualkeyboard.openwnn qt.virtualkeyboard.pinyin qt.virtualkeyboard.t9write qt.virtualkeyboard.tcime qt.virtualkeyboard.tests.manual.x11vkbtest.filehelper qt.virtualkeyboard.tests.manual.x11vkbtest.memorymonitor qt.virtualkeyboard.tests.manual.x11vkbtest.testlanguagechange qt.virtualkeyboard.tests.manual.x11vkbtest.testthread qt.virtualkeyboard.tests.manual.x11vkbwrapper.handleatspievents qt.virtualkeyboard.tests.manual.x11vkbwrapper.handlekeyevents qt.virtualkeyboard.tests.manual.x11vkbwrapper.handlelanguagechange qt.vulkan qt.waylandcompositor qt.waylandcompositor.hardwareintegration qt.waylandcompositor.inputmethods qt.webengine.webchanneltransport qt.widgets.gestures qt.widgets.painting qt.widgets.tests qt.widgets.tests.qfilesystemmodel qt.winrtrunner qt.winrtrunner.app qt.xkbcommon qt.xkb.compose
-
@KH-219Design Thanks lots! Whoa there is lots of tags O_O. But... how do I get the currently enabled tags? Is there a way to retrieve the list?
I know that not everything gets printed as if I do *.debug=true/etc/etc I get more prints. So I wonder if there is a path for that? Or all get set up dynamically? -
@Dariusz That's what the QLoggingCategory::installFilter function lets you do.
#include <QApplication> #include <QLoggingCategory> #include <QLabel> #include <cstdio> QLoggingCategory::CategoryFilter oldFilter; void myCategoryFilter(QLoggingCategory *category) { printf("pre-filter %s: debug:%d info:%d warning:%d critical:%d\n", category->categoryName(), category->isDebugEnabled(), category->isInfoEnabled(), category->isWarningEnabled(), category->isCriticalEnabled()); if (oldFilter) { oldFilter(category); printf("post-filter %s: debug:%d info:%d warning:%d critical:%d\n", category->categoryName(), category->isDebugEnabled(), category->isInfoEnabled(), category->isWarningEnabled(), category->isCriticalEnabled()); } fflush(stdout); } int main(int argc, char *argv[]) { oldFilter = QLoggingCategory::installFilter(myCategoryFilter); // Use some Qt functionality to cause categories to be registered QApplication a(argc, argv); QLabel label("text"); label.show(); return a.exec(); }
Sample ouput:
pre-filter qt.qpa: debug:1 info:1 warning:1 critical:1 post-filter qt.qpa: debug:0 info:0 warning:1 critical:1 pre-filter qt.qpa.screen: debug:1 info:1 warning:1 critical:1 post-filter qt.qpa.screen: debug:0 info:0 warning:0 critical:1 pre-filter qt.accessibility.cache: debug:1 info:1 warning:1 critical:1 post-filter qt.accessibility.cache: debug:0 info:1 warning:1 critical:1 ...