Solución:
Aquí hay una solución basada en registros de Django. Utiliza la configuración DEBUG en lugar de verificar si está ejecutando el servidor de desarrollo o no, pero si encuentra una mejor manera de verificarlo, debería ser fácil de adaptar.
LOGGING = {
'version': 1,
'formatters': {
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
},
'simple': {
'format': '%(levelname)s %(message)s'
},
},
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'simple'
},
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': '/path/to/your/file.log',
'formatter': 'simple'
},
},
'loggers': {
'django': {
'handlers': ['file'],
'level': 'DEBUG',
'propagate': True,
},
}
}
if DEBUG:
# make all loggers use the console.
for logger in LOGGING['loggers']:
LOGGING['loggers'][logger]['handlers'] = ['console']
consulte https://docs.djangoproject.com/en/dev/topics/logging/ para obtener más detalles.
El texto impreso en stderr aparecerá en el registro de errores de httpd cuando se ejecute bajo mod_wsgi. Puedes usar print
directamente, o usar logging
en lugar de.
print >>sys.stderr, 'Goodbye, cruel world!'
Puede configurar el inicio de sesión en su settings.py
expediente.
Un ejemplo:
if DEBUG:
# will output to your console
logging.basicConfig(
level = logging.DEBUG,
format="%(asctime)s %(levelname)s %(message)s",
)
else:
# will output to logging file
logging.basicConfig(
level = logging.DEBUG,
format="%(asctime)s %(levelname)s %(message)s",
filename="/my_log_file.log",
filemode="a"
)
Sin embargo, eso depende de la configuración de DEBUG, y tal vez no quieras tener que preocuparte por cómo está configurado. Vea esta respuesta sobre ¿Cómo puedo saber si mi aplicación Django se está ejecutando en el servidor de desarrollo o no? para una mejor forma de escribir ese condicional. Editar: el ejemplo anterior es de un proyecto de Django 1.1, la configuración de registro en Django ha cambiado algo desde esa versión.