#16121: Duplicating loggin or Change formatter every time
--------------------+-------------------------------
 Reporter:  niwi@…  |          Owner:  nobody
     Type:  Bug     |         Status:  new
Milestone:          |      Component:  Uncategorized
  Version:  1.3     |       Severity:  Normal
 Keywords:          |   Triage Stage:  Unreviewed
Has patch:  0       |  Easy pickings:  0
--------------------+-------------------------------
 I have configured a logger like this:


 {{{
 #!python
 'niwi':{
     'handlers': ['console'],
     'level': 'DEBUG',
     'propagate': False,
 },
 'niwibe_console': {
     'handlers': ['niwibe_console_handler'],
     'level': 'DEBUG',
     'propagate': False,
 }
 }}}


 And the configuration of handlers and formatters like this:

 {{{
 #!python
 'formatters': {
     'verbose': {
         'format':
 '%(asctime)s:%(levelname)s:%(module)s:%(process)d:%(message)s'
     },
     'null': {
         'format': '%(message)s',
     }
 },
 'handlers': {
     'null': {
         'level':'DEBUG',
         'class':'django.utils.log.NullHandler',
     },
     'console':{
         'level':'DEBUG',
         #'class':'logging.StreamHandler',
         'class':'niwi_logging.handlers.GreenStreamHandler',
         'formatter': 'verbose'
     },
     'niwibe_console_handler': {
         'level': 'DEBUG',
         'class': 'niwi_logging.handlers.GreenStreamHandler',
         #'class': 'logging.StreamHandler',
     },
     'mail_admins': {
         'level': 'ERROR',
         'class': 'django.utils.log.AdminEmailHandler',
     },
 },
 }}}

 I have this class as the view:


 {{{
 #!python
 from django.views.generic import View
 from django.http import HttpResponse
 import logging

 local_loggers = {}

 class TestView(View):
     def get(self, request, *args, **kwargs):
         logger_key = "niwibe_console"
         logger_val = "test"

         if logger_key in local_loggers:
             logger_obj = local_loggers[logger_key]
         else:
             local_loggers[logger_key] = logging.getLogger(logger_key)
             logger_obj = local_loggers[logger_key]


         # debug
         print logger_obj.handlers
         print logger_obj.parent

         logger_obj.info(logger_key)
         return HttpResponse('ok', mimetype="text/plain")
 }}}

 The handler used is:

 {{{
 #!python
 from gevent.queue import Queue
 from gevent import sleep, spawn
 from logging import StreamHandler

 class GreenStreamHandler(StreamHandler):
     """ Gevent-based experimental async StreamHandler implementation."""

     _log_queue = Queue()
     def __init__(self, *args, **kwargs):
         #super(GreenStreamHandler, self).__init__(*args, **kwargs)
         StreamHandler.__init__(self, *args, **kwargs)
         self.grl = spawn(self.__save_loop)

     def __save_loop(self):
         while True:
             record = self._log_queue.get()
             #super(GreenStreamHandler, self).emit(record)
             StreamHandler.emit(self, record)

     def emit(self, record):
         self._log_queue.put_nowait(record)
 }}}



 I get a strange result. Sometimes I get one formatter sometimes not:


 {{{
 [<niwi_logging.handlers.GreenStreamHandler object at 0x2f28210>]
 <logging.RootLogger object at 0x2d39fd0>
 2011-05-29 14:45:18,627:INFO:views:20051:niwibe_console

 [<niwi_logging.handlers.GreenStreamHandler object at 0x2f28210>]
 <logging.RootLogger object at 0x2d39fd0>
 niwibe_console

 [<niwi_logging.handlers.GreenStreamHandler object at 0x2f28210>]
 <logging.RootLogger object at 0x2d39fd0>
 niwibe_console

 [<niwi_logging.handlers.GreenStreamHandler object at 0x2f28210>]
 <logging.RootLogger object at 0x2d39fd0>
 2011-05-29 14:45:21,383:INFO:views:20051:niwibe_console
 }}}


 Is not the first time it happens! Similar things happened to me without
 using Gevent, in a standard environment with mod_wsgi and apache ...

 Environment:
 python 2.7
 django 1.3
 linux

-- 
Ticket URL: <https://code.djangoproject.com/ticket/16121>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.

Reply via email to