Django logging to console

前端 未结 3 728
一生所求
一生所求 2020-12-24 06:14

I\'m trying to set up a logger that will log to the console (I want this because I\'m using Heroku with Papertrails (Heroku\'s logging addon) and stuff written to the consol

相关标签:
3条回答
  • 2020-12-24 07:03

    I finally got it. Here's what was happening.

    When you define a logger using getLogger, you give a logger a name, in this case

    logger = logging.getLogger(__name__)
    

    and you then have to define how a logger with that name behaves in the LOGGING configuration. In this case, since that file is inside a module, the logger's name becomes myApp.page_processors, not page_processors, so the logger named 'page_processors' in the LOGGING dict is never called. So why was the logging to the file working? Because in the (...) that I show in the code there is another logger named 'myApp' that apparently gets called instead, and that one writes to the file.

    So the solution to this question is just to properly name the logger:

    LOGGING = {
        # (...)
        'loggers': {
            # (...)
            'myApp.page_processors': {
                'handlers': ['console','file'],
                'level': 'DEBUG',
            }
        }
        # (...)
    }
    
    0 讨论(0)
  • 2020-12-24 07:07

    I am writing this for easy understanding dummies like me.

    In settings.py

    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'handlers': {
            'console': {
                'class': 'logging.StreamHandler',
            },
        },
        'loggers': {
            'app_api': {
                'handlers': ['console'],
                'level': 'INFO',
            },
        },
        }
    

    Somewhere in your application views

    import logging
    logger = logging.getLogger('app_api') #from LOGGING.loggers in settings.py
    
    try:
        one = 1/0
    except Exception as e:
        logger.error(e)
    
    0 讨论(0)
  • 2020-12-24 07:10

    The following script:

    import logging, logging.config
    import sys
    
    LOGGING = {
        'version': 1,
        'handlers': {
            'console': {
                'class': 'logging.StreamHandler',
                'stream': sys.stdout,
            }
        },
        'root': {
            'handlers': ['console'],
            'level': 'INFO'
        }
    }
    
    logging.config.dictConfig(LOGGING)
    logging.info('Hello')
    

    writes Hello to sys.stdout, as can be verified by piping its output to a file. So your problem is likely to be somewhere else (or possibly that sys.stdout isn't what you expect). You could try with sys.__stdout__ to see if that makes a difference.

    0 讨论(0)
提交回复
热议问题