summaryrefslogtreecommitdiff
path: root/django/utils/log.py
diff options
context:
space:
mode:
authorFlavio Curella <flavio.curella@gmail.com>2015-11-06 10:19:41 -0600
committerTim Graham <timograham@gmail.com>2016-01-11 07:35:17 -0500
commit0bc5cd628042bf0a44df60a93085a4f991a84dfb (patch)
tree076999e7afc4c14840a44eff6d92b0c0ba215d36 /django/utils/log.py
parent3792e291e6aee9cd43a48fac33f19a6ab24920d2 (diff)
Fixed #25684 -- Made runserver use logging for request/response output.
Thanks andreif for the contributing to the patch.
Diffstat (limited to 'django/utils/log.py')
-rw-r--r--django/utils/log.py50
1 files changed, 50 insertions, 0 deletions
diff --git a/django/utils/log.py b/django/utils/log.py
index 6fb487b7fc..fcc7575180 100644
--- a/django/utils/log.py
+++ b/django/utils/log.py
@@ -9,6 +9,7 @@ from copy import copy
from django.conf import settings
from django.core import mail
from django.core.mail import get_connection
+from django.core.management.color import color_style
from django.utils.deprecation import RemovedInNextVersionWarning
from django.utils.module_loading import import_string
from django.views.debug import ExceptionReporter
@@ -28,12 +29,23 @@ DEFAULT_LOGGING = {
'()': 'django.utils.log.RequireDebugTrue',
},
},
+ 'formatters': {
+ 'django.server': {
+ '()': 'django.utils.log.ServerFormatter',
+ 'format': '[%(server_time)s] %(message)s',
+ }
+ },
'handlers': {
'console': {
'level': 'INFO',
'filters': ['require_debug_true'],
'class': 'logging.StreamHandler',
},
+ 'django.server': {
+ 'level': 'INFO',
+ 'class': 'logging.StreamHandler',
+ 'formatter': 'django.server',
+ },
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
@@ -45,6 +57,11 @@ DEFAULT_LOGGING = {
'handlers': ['console', 'mail_admins'],
'level': 'INFO',
},
+ 'django.server': {
+ 'handlers': ['django.server'],
+ 'level': 'INFO',
+ 'propagate': False,
+ },
'py.warnings': {
'handlers': ['console'],
},
@@ -155,3 +172,36 @@ class RequireDebugFalse(logging.Filter):
class RequireDebugTrue(logging.Filter):
def filter(self, record):
return settings.DEBUG
+
+
+class ServerFormatter(logging.Formatter):
+ def __init__(self, *args, **kwargs):
+ self.style = color_style()
+ super(ServerFormatter, self).__init__(*args, **kwargs)
+
+ def format(self, record):
+ args = record.args
+ msg = record.msg
+
+ if len(args) == 0:
+ msg = self.style.HTTP_BAD_REQUEST(msg)
+ else:
+ if args[1][0] == '2':
+ # Put 2XX first, since it should be the common case
+ msg = self.style.HTTP_SUCCESS(msg)
+ elif args[1][0] == '1':
+ msg = self.style.HTTP_INFO(msg)
+ elif args[1] == '304':
+ msg = self.style.HTTP_NOT_MODIFIED(msg)
+ elif args[1][0] == '3':
+ msg = self.style.HTTP_REDIRECT(msg)
+ elif args[1] == '404':
+ msg = self.style.HTTP_NOT_FOUND(msg)
+ elif args[1][0] == '4':
+ msg = self.style.HTTP_BAD_REQUEST(msg)
+ else:
+ # Any 5XX, or any other response
+ msg = self.style.HTTP_SERVER_ERROR(msg)
+
+ record.msg = msg
+ return super(ServerFormatter, self).format(record)