kuuko pushed a commit to branch master.

http://git.enlightenment.org/bindings/python/python-efl.git/commit/?id=d6d440c3a6c1a159220a41f6b6a2e0713a4bad50

commit d6d440c3a6c1a159220a41f6b6a2e0713a4bad50
Author: Kai Huuhko <kai.huu...@gmail.com>
Date:   Sat Oct 26 03:22:47 2013 +0300

    Add support for loggers that have been initialized already.
    
    This allows module initialization to be logged as well.
    
    Changed add_logger to return the logger object instead of int.
---
 efl/eo/efl.eo.pyx            |  2 +-
 efl/utils/logger.pyx         | 45 ++++++++++++++++++++++++++------------------
 examples/elementary/test.py  | 24 +++++++++++++----------
 include/efl.utils.logger.pxd |  2 +-
 4 files changed, 43 insertions(+), 30 deletions(-)

diff --git a/efl/eo/efl.eo.pyx b/efl/eo/efl.eo.pyx
index b48a76d..14f4bcd 100644
--- a/efl/eo/efl.eo.pyx
+++ b/efl/eo/efl.eo.pyx
@@ -30,7 +30,7 @@ from efl.c_eo cimport Eo as cEo, eo_init, eo_shutdown, 
eo_del, eo_do, \
 from efl.utils.logger cimport add_logger
 
 # Set this to public and export it in pxd if you need it in another module
-cdef int PY_EFL_EO_LOG_DOMAIN = add_logger(__name__)
+cdef int PY_EFL_EO_LOG_DOMAIN = add_logger(__name__).eina_log_domain
 
 
 def init():
diff --git a/efl/utils/logger.pyx b/efl/utils/logger.pyx
index 46de4ef..515c566 100644
--- a/efl/utils/logger.pyx
+++ b/efl/utils/logger.pyx
@@ -20,7 +20,10 @@ from efl.eina cimport Eina_Log_Domain, 
const_Eina_Log_Domain, Eina_Log_Level, \
     eina_log_print_cb_set, eina_log_domain_register, eina_log_level_set, \
     eina_log_level_get, eina_log_domain_level_get, eina_log_domain_level_set, \
     eina_log_print
-from cpython cimport PyUnicode_AsUTF8String
+from cpython cimport PyUnicode_AsUTF8String, PY_VERSION_HEX
+
+import logging
+import types
 
 cdef extern from "stdarg.h":
     ctypedef struct va_list:
@@ -49,8 +52,6 @@ cdef void py_eina_log_print_cb(const_Eina_Log_Domain *d,
     logger = loggers.get(name, loggers["efl"])
     logger.handle(rec)
 
-import logging
-
 eina_log_print_cb_set(py_eina_log_print_cb, NULL)
 
 class PyEFLLogger(logging.Logger):
@@ -67,25 +68,33 @@ class PyEFLLogger(logging.Logger):
         eina_log_domain_level_set(cname, log_levels.index(lvl))
         logging.Logger.setLevel(self, lvl)
 
-logging.setLoggerClass(PyEFLLogger)
-
-rootlog = logging.getLogger("efl")
-rootlog.propagate = False
-rootlog.setLevel(logging.WARNING)
-rootlog.addHandler(logging.NullHandler())
-
-logging.setLoggerClass(logging.Logger)
-
-cdef public int PY_EFL_LOG_DOMAIN = rootlog.eina_log_domain
-
-cdef int add_logger(object name):
+cdef object add_logger(object name):
     logging.setLoggerClass(PyEFLLogger)
 
     log = logging.getLogger(name)
-    log.propagate = True
-    log.setLevel(logging.WARNING)
+    if not isinstance(log, PyEFLLogger):
+        # The logger has been instantiated already so lets add our own
+        # initialization for it.
+        cname = name
+        if isinstance(cname, unicode): cname = PyUnicode_AsUTF8String(cname)
+        log.eina_log_domain = eina_log_domain_register(cname, NULL)
+        loggers[name] = log
+        lvl = log.getEffectiveLevel()
+        eina_log_domain_level_set(cname, log_levels.index(lvl))
+        if PY_VERSION_HEX < 0x03000000:
+            log.setLevel = types.MethodType(PyEFLLogger.setLevel, log, 
PyEFLLogger)
+        else:
+            log.setLevel = types.MethodType(PyEFLLogger.setLevel, log)
+    else:
+        log.propagate = True
+        log.setLevel(logging.WARNING)
     log.addHandler(logging.NullHandler())
 
     logging.setLoggerClass(logging.Logger)
 
-    return log.eina_log_domain
+    return log
+
+rootlog = add_logger("efl")
+rootlog.propagate = False
+
+cdef public int PY_EFL_LOG_DOMAIN = rootlog.eina_log_domain
diff --git a/examples/elementary/test.py b/examples/elementary/test.py
index a4f73c3..c05682b 100755
--- a/examples/elementary/test.py
+++ b/examples/elementary/test.py
@@ -1,6 +1,19 @@
 #!/usr/bin/env python
 # encoding: utf-8
 
+import logging
+elog = logging.getLogger("efl")
+elog.setLevel(logging.DEBUG)
+
+elog_form = logging.Formatter("[%(name)s] %(levelname)s - %(message)s")
+elog_hdlr = logging.StreamHandler()
+elog_hdlr.setFormatter(elog_form)
+
+elog.addHandler(elog_hdlr)
+
+eolog = logging.getLogger("efl.eo")
+eolog.setLevel(logging.DEBUG)
+
 import os
 
 from efl import evas
@@ -15,16 +28,7 @@ from efl.elementary.check import Check
 from efl.elementary.entry import Entry
 from efl.elementary.scroller import Scroller
 
-import logging
-elog = logging.getLogger("efl")
-elog.setLevel(logging.DEBUG)
-
-elog_form = logging.Formatter("[%(name)s] %(levelname)s - %(message)s")
-elog_hdlr = logging.StreamHandler()
-elog_hdlr.setFormatter(elog_form)
-
-elog.addHandler(elog_hdlr)
-
+elog.setLevel(logging.INFO)
 
 items = [
          ("Core Libs", [
diff --git a/include/efl.utils.logger.pxd b/include/efl.utils.logger.pxd
index 1817724..a4550af 100644
--- a/include/efl.utils.logger.pxd
+++ b/include/efl.utils.logger.pxd
@@ -1,3 +1,3 @@
 cdef:
-    int add_logger(object name)
+    object add_logger(object name)
     int PY_EFL_LOG_DOMAIN

-- 


Reply via email to