Statistics
| Branch: | Tag: | Revision:

root / util / log.py @ c130b56e

History | View | Annotate | Download (2.3 kB)

1 9e98ba3c Giorgos Verigakis
# Copyright 2011 GRNET S.A. All rights reserved.
2 9e98ba3c Giorgos Verigakis
#
3 9e98ba3c Giorgos Verigakis
# Redistribution and use in source and binary forms, with or
4 9e98ba3c Giorgos Verigakis
# without modification, are permitted provided that the following
5 9e98ba3c Giorgos Verigakis
# conditions are met:
6 9e98ba3c Giorgos Verigakis
#
7 9e98ba3c Giorgos Verigakis
#   1. Redistributions of source code must retain the above
8 9e98ba3c Giorgos Verigakis
#      copyright notice, this list of conditions and the following
9 9e98ba3c Giorgos Verigakis
#      disclaimer.
10 9e98ba3c Giorgos Verigakis
#
11 9e98ba3c Giorgos Verigakis
#   2. Redistributions in binary form must reproduce the above
12 9e98ba3c Giorgos Verigakis
#      copyright notice, this list of conditions and the following
13 9e98ba3c Giorgos Verigakis
#      disclaimer in the documentation and/or other materials
14 9e98ba3c Giorgos Verigakis
#      provided with the distribution.
15 9e98ba3c Giorgos Verigakis
#
16 9e98ba3c Giorgos Verigakis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 9e98ba3c Giorgos Verigakis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 9e98ba3c Giorgos Verigakis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 9e98ba3c Giorgos Verigakis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 9e98ba3c Giorgos Verigakis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 9e98ba3c Giorgos Verigakis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 9e98ba3c Giorgos Verigakis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 9e98ba3c Giorgos Verigakis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 9e98ba3c Giorgos Verigakis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 9e98ba3c Giorgos Verigakis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 9e98ba3c Giorgos Verigakis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 9e98ba3c Giorgos Verigakis
# POSSIBILITY OF SUCH DAMAGE.
28 9e98ba3c Giorgos Verigakis
#
29 9e98ba3c Giorgos Verigakis
# The views and conclusions contained in the software and
30 9e98ba3c Giorgos Verigakis
# documentation are those of the authors and should not be
31 9e98ba3c Giorgos Verigakis
# interpreted as representing official policies, either expressed
32 9e98ba3c Giorgos Verigakis
# or implied, of GRNET S.A.
33 9e98ba3c Giorgos Verigakis
34 9e98ba3c Giorgos Verigakis
import logging
35 9e98ba3c Giorgos Verigakis
36 9e98ba3c Giorgos Verigakis
from django.conf import settings
37 9e98ba3c Giorgos Verigakis
38 9e98ba3c Giorgos Verigakis
from synnefo.util.dictconfig import dictConfig
39 9e98ba3c Giorgos Verigakis
40 9e98ba3c Giorgos Verigakis
41 9e98ba3c Giorgos Verigakis
class NullHandler(logging.Handler):
42 9e98ba3c Giorgos Verigakis
    def emit(self, record):
43 9e98ba3c Giorgos Verigakis
        pass
44 9e98ba3c Giorgos Verigakis
45 9e98ba3c Giorgos Verigakis
logging.NullHandler = NullHandler
46 9e98ba3c Giorgos Verigakis
47 9e98ba3c Giorgos Verigakis
48 9e98ba3c Giorgos Verigakis
def disable_unused_loggers():
49 9e98ba3c Giorgos Verigakis
    """Disable handlers that are not used by any logger"""
50 9e98ba3c Giorgos Verigakis
    
51 9e98ba3c Giorgos Verigakis
    logging = settings.LOGGING
52 9e98ba3c Giorgos Verigakis
    
53 9e98ba3c Giorgos Verigakis
    active_handlers = set()
54 9e98ba3c Giorgos Verigakis
    loggers = logging.get('loggers', {})
55 9e98ba3c Giorgos Verigakis
    for logger in loggers.values():
56 9e98ba3c Giorgos Verigakis
        active_handlers.update(logger.get('handlers', []))
57 9e98ba3c Giorgos Verigakis
    
58 9e98ba3c Giorgos Verigakis
    handlers = logging.get('handlers', {})
59 9e98ba3c Giorgos Verigakis
    for handler in handlers:
60 9e98ba3c Giorgos Verigakis
        if handler not in active_handlers:
61 9e98ba3c Giorgos Verigakis
            handlers[handler] = {'class': 'logging.NullHandler'}
62 9e98ba3c Giorgos Verigakis
63 9e98ba3c Giorgos Verigakis
64 9e98ba3c Giorgos Verigakis
disable_unused_loggers()
65 9e98ba3c Giorgos Verigakis
dictConfig(settings.LOGGING)
66 9e98ba3c Giorgos Verigakis
67 9e98ba3c Giorgos Verigakis
68 9e98ba3c Giorgos Verigakis
def getLogger(name):
69 9e98ba3c Giorgos Verigakis
    return logging.getLogger(name)