Skip to content

Commit 051d251

Browse files
authored
Merge pull request #10 from CiCiUi/options
list per page and enable formatter options
2 parents 413cf97 + f74f4b8 commit 051d251

File tree

8 files changed

+72
-13
lines changed

8 files changed

+72
-13
lines changed

README.rst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,3 +85,9 @@ Quick start
8585
except Exception as e:
8686
db_logger.exception(e)
8787
88+
89+
90+
Options
91+
-------
92+
1. DJANGO_DB_LOGGER_ADMIN_LIST_PER_PAGE: integer. list per page in admin view. default ``10``
93+
2. DJANGO_DB_LOGGER_ENABLE_FORMATTER: boolean. Using ``formatter`` options to format message.``True`` or ``False``, default ``False``

dev_env/settings.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,19 +44,23 @@
4444
},
4545
},
4646
'handlers': {
47-
'db': {
47+
'db_handler': {
4848
'level': 'DEBUG',
49-
'class': 'django_db_logger.db_log_handler.DatabaseLogHandler'
49+
'class': 'django_db_logger.db_log_handler.DatabaseLogHandler',
50+
'formatter': 'verbose'
5051
}
5152
},
5253
'loggers': {
53-
'db_logger': {
54-
'handlers': ['db'],
54+
'db': {
55+
'handlers': ['db_handler'],
5556
'level': 'DEBUG'
5657
}
5758
}
5859
}
5960

61+
DJANGO_DB_LOGGER_ENABLE_FORMATTER = True
62+
DJANGO_DB_LOGGER_ADMIN_LIST_PER_PAGE = 30
63+
6064
TEMPLATES = [
6165
{
6266
'BACKEND': 'django.template.backends.django.DjangoTemplates',

dev_env/urls.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
from django.contrib import admin
22
from django.urls import path
33

4+
from django_db_logger.views import __gen_500_errors
5+
46
urlpatterns = [
57
path('admin/', admin.site.urls),
8+
path('__gen_500/', __gen_500_errors)
69
]

django_db_logger/admin.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@
44
from django.contrib import admin
55
from django.utils.html import format_html
66

7+
from django_db_logger.config import DJANGO_DB_LOGGER_ADMIN_LIST_PER_PAGE
78
from .models import StatusLog
89

910

1011
class StatusLogAdmin(admin.ModelAdmin):
1112
list_display = ('colored_msg', 'traceback', 'create_datetime_format')
1213
list_display_links = ('colored_msg', )
1314
list_filter = ('level', )
14-
list_per_page = 10
15+
list_per_page = DJANGO_DB_LOGGER_ADMIN_LIST_PER_PAGE
1516

1617
def colored_msg(self, instance):
1718
if instance.level in [logging.NOTSET, logging.INFO]:
@@ -28,7 +29,7 @@ def traceback(self, instance):
2829

2930
def create_datetime_format(self, instance):
3031
return instance.create_datetime.strftime('%Y-%m-%d %X')
31-
create_datetime_format.short_description = 'Create Datetime'
32+
create_datetime_format.short_description = 'Created at'
3233

3334

3435
admin.site.register(StatusLog, StatusLogAdmin)

django_db_logger/config.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from django.conf import settings
2+
3+
MSG_STYLE_SIMPLE = 'Simple'
4+
MSG_STYLE_FULL = 'Full'
5+
6+
DJANGO_DB_LOGGER_ADMIN_LIST_PER_PAGE = getattr(settings, 'DJANGO_DB_LOGGER_ADMIN_LIST_PER_PAGE', 10)
7+
8+
DJANGO_DB_LOGGER_ENABLE_FORMATTER = getattr(settings, 'DJANGO_DB_LOGGER_ENABLE_FORMATTER', False)

django_db_logger/db_log_handler.py

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
import logging
2-
import traceback
2+
3+
from django_db_logger.config import DJANGO_DB_LOGGER_ENABLE_FORMATTER, MSG_STYLE_SIMPLE
4+
5+
6+
db_default_formatter = logging.Formatter()
37

48

59
class DatabaseLogHandler(logging.Handler):
@@ -9,13 +13,36 @@ def emit(self, record):
913
trace = None
1014

1115
if record.exc_info:
12-
trace = traceback.format_exc()
16+
trace = db_default_formatter.formatException(record.exc_info)
17+
18+
if DJANGO_DB_LOGGER_ENABLE_FORMATTER:
19+
msg = self.format(record)
20+
else:
21+
msg = record.getMessage()
1322

1423
kwargs = {
1524
'logger_name': record.name,
1625
'level': record.levelno,
17-
'msg': record.getMessage(),
26+
'msg': msg,
1827
'trace': trace
1928
}
2029

21-
StatusLog.objects.create(**kwargs)
30+
StatusLog.objects.create(**kwargs)
31+
32+
def format(self, record):
33+
if self.formatter:
34+
fmt = self.formatter
35+
else:
36+
fmt = db_default_formatter
37+
38+
if type(fmt) == logging.Formatter:
39+
record.message = record.getMessage()
40+
41+
if fmt.usesTime():
42+
record.asctime = fmt.formatTime(record, fmt.datefmt)
43+
44+
# ignore exception traceback and stack info
45+
46+
return fmt.formatMessage(record)
47+
else:
48+
return fmt.format(record)

django_db_logger/views.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
1-
from django.shortcuts import render
1+
import logging
22

3-
# Create your views here.
3+
from django.http import HttpResponse
4+
5+
logger = logging.getLogger('db')
6+
7+
def __gen_500_errors(request):
8+
try:
9+
1/0
10+
except Exception as e:
11+
logger.exception(e)
12+
13+
return HttpResponse('Hello 500!')

test_settings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,4 @@
4747
}
4848
}
4949

50-
SECRET_KEY = 'https://ciciui.com/'
50+
SECRET_KEY = 'jfkladsjfakljr;els'

0 commit comments

Comments
 (0)