changeset 6:85649eca9f9b

core (logs): integrate Kivy logs with SàT: - forbid kivy to handle its own logs - added log_kivy_level option which can be put in sat.conf in [cagou] section. This option can have the following values: - follow [default]: follow SàT cagou level - kivy: follow level set in kivy own configuration - [log_level]: set this log level only for kivy messages
author Goffi <goffi@goffi.org>
date Thu, 07 Jul 2016 09:39:21 +0200
parents 33b619506832
children 5ebe1592a05a
files src/cagou.py src/logging_setter.py
diffstat 2 files changed, 62 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/cagou.py	Thu Jul 07 09:39:21 2016 +0200
+++ b/src/cagou.py	Thu Jul 07 09:39:21 2016 +0200
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr//bin/env python2
 # -*- coding: utf-8 -*-
 
 # Cagou: desktop/mobile frontend for Salut à Toi XMPP client
@@ -18,9 +18,9 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
-from sat_frontends.primitivus.constants import Const as C
-from sat.core import log_config
-log_config.satConfigure(C.LOG_BACKEND_STANDARD, C)
+import logging_setter
+logging_setter.set_logging()
+from constants import Const as C
 from sat.core import log as logging
 log = logging.getLogger(__name__)
 from sat_frontends.quick_frontend.quick_app import QuickApp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/logging_setter.py	Thu Jul 07 09:39:21 2016 +0200
@@ -0,0 +1,58 @@
+#!/usr//bin/env python2
+# -*- coding: utf-8 -*-
+
+# Cagou: desktop/mobile frontend for Salut à Toi XMPP client
+# Copyright (C) 2016 Jérôme Poisson (goffi@goffi.org)
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+
+# You should have received a copy of the GNU Affero General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+CONF_KIVY_LEVEL = 'log_kivy_level'
+
+def set_logging():
+    from constants import Const as C
+    from sat.core import log_config
+    log_config.satConfigure(C.LOG_BACKEND_STANDARD, C)
+
+    import config
+    kivy_level = config.getConfig(C.CONFIG_SECTION, CONF_KIVY_LEVEL, 'follow').upper()
+
+    # kivy handles its own loggers, we don't want that!
+    import logging
+    root_logger = logging.root
+    kivy_logger = logging.getLogger('kivy')
+    ori_addHandler = kivy_logger.addHandler
+    kivy_logger.addHandler = lambda dummy: None
+    ori_setLevel = kivy_logger.setLevel
+    if kivy_level == 'FOLLOW':
+        # level is following SàT level
+        kivy_logger.setLevel = lambda level: None
+    elif kivy_level == 'KIVY':
+        # level will be set by Kivy according to its own conf
+        pass
+    elif kivy_level in C.LOG_LEVELS:
+        kivy_logger.setLevel(kivy_level)
+        kivy_logger.setLevel = lambda level: None
+    else:
+        raise ValueError(u"Unknown value for {name}: {value}".format(name=CONF_KIVY_LEVEL, value=kivy_level))
+
+    # during import kivy set its logging stuff
+    import kivy
+    kivy # to avoid pyflakes warning
+
+    # we want to separate kivy logs from other logs
+    logging.root = root_logger
+
+    # we restore original methods
+    kivy_logger.addHandler = ori_addHandler
+    kivy_logger.setLevel = ori_setLevel