DZone
Web Dev Zone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
  • Refcardz
  • Trend Reports
  • Webinars
  • Zones
  • |
    • Agile
    • AI
    • Big Data
    • Cloud
    • Database
    • DevOps
    • Integration
    • IoT
    • Java
    • Microservices
    • Open Source
    • Performance
    • Security
    • Web Dev
DZone > Web Dev Zone > Console Logging to STDOUT in Django

Console Logging to STDOUT in Django

David Winterbottom user avatar by
David Winterbottom
·
Feb. 13, 12 · Web Dev Zone · Interview
Like (0)
Save
Tweet
10.42K Views

Join the DZone community and get the full member experience.

Join For Free

Problem

By default in Python (and Django), the documented console handler emits to STDERR, but you want it to use STDOUT instead. This is often desired for management commands that run as cronjobs.

 

Solution

For Python 2.6, use the following LOGGING config in your settings to specify a different output stream:

import sys
LOGGING = {
    'handlers': {
        'console':{
            'level':'INFO',
            'class':'logging.StreamHandler',
            'strm': sys.stdout
        },
        ...
    }
}


For Python 2.7+, the keyword argument to the constructor of logging.StreamHandler is stream rather than strm. Ensure you use the right version.

Discussion

Django's logging docs detail the following logging configuration for a console handler:

LOGGING = {
    ...
    'handlers': {
        'console':{
            'level':'DEBUG',
            'class':'logging.StreamHandler',
            'formatter': 'simple'
        },
    },
    ...
}


...however, the default output stream for logging.StreamHandler is STDERR. The extra keyword argument in the solution alter this behaviour to use STDOUT.

Logging to STDERR means that any output from cron jobs is emailed to root. A more desirable behaviour is for only genuine errors to trigger emails, while normal output can be logged to file. Hence, a sensible cronjob file would look something like:

SHELL=/bin/bash
MAILTO=alerts.someproject@yourcompany.co.uk

*/10 * * * * app source /venv/bin/activate && /app/manage.py do_something > /dev/null


Source: http://codeinthehole.com/writing/console-logging-to-stdout-in-django/

Console (video game CLI) Django (web framework)

Opinions expressed by DZone contributors are their own.

Popular on DZone

  • Top 5 Programming Languages in AI: A Comparison
  • RSA Conference Recap for Developers
  • Deploying Java Applications to AWS Elastic Beanstalk
  • Java: Why Core-to-Core Latency Matters

Comments

Web Dev Partner Resources

X

ABOUT US

  • About DZone
  • Send feedback
  • Careers
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • MVB Program
  • Become a Contributor
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 600 Park Offices Drive
  • Suite 300
  • Durham, NC 27709
  • support@dzone.com
  • +1 (919) 678-0300

Let's be friends:

DZone.com is powered by 

AnswerHub logo