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 --