-
Notifications
You must be signed in to change notification settings - Fork 231
/
Copy pathlogconf.py
109 lines (78 loc) · 2.31 KB
/
logconf.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import os
from django.core.cache import cache
#
# To see all log messages: export DJANGO_LOG_LEVEL=DEBUG
#
VALID_LEVELS = ['DEBUG', 'INFO', 'WARNING', 'ERROR']
LOG_LEVEL = os.getenv('ENGINE_LOG_LEVEL', '').upper() or 'INFO'
assert LOG_LEVEL in VALID_LEVELS, f"level {LOG_LEVEL} not in {VALID_LEVELS}"
DJANGO_LOG_LEVEL = os.getenv('DJANGO_LOG_LEVEL', '').upper() or 'WARNING'
assert DJANGO_LOG_LEVEL in VALID_LEVELS
class RateLimitFilter(object):
"""
Limits the number of error emails when errors get triggered.
"""
# Time out in seconds.
TIMEOUT = 300
CACHE_KEY = "error-limiter"
def filter(self, record):
exists = cache.get(self.CACHE_KEY)
if not exists:
cache.set(self.CACHE_KEY, 1, self.TIMEOUT)
return not exists
# Override the Django defaults
#
# https://stackoverflow.com/questions/20282521/django-request-logger-not-propagated-to-root
#
# LOGGING_CONFIG = None
#
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': '%(levelname)s\t%(asctime)s\t%(module)s.%(funcName)s\t%(lineno)s\t%(message)s\t'
},
'simple': {
'format': '%(levelname)s\t%(module)s\t%(message)s'
},
},
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse'
},
'rate_limit': {
'()': 'biostar.logconf.RateLimitFilter',
},
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'verbose'
},
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false', 'rate_limit'],
'class': 'django.utils.log.AdminEmailHandler',
'include_html': True,
},
'errors': {
'level': 'ERROR',
'filters': ['rate_limit'],
'class': 'logging.FileHandler',
'filename': 'error.log',
}
},
'loggers': {
'django': {
'handlers': ['console', 'mail_admins'],
'level': DJANGO_LOG_LEVEL,
'propagate': True,
},
'engine': {
'handlers': ['console', 'mail_admins'],
'level': LOG_LEVEL,
'propagate': True,
},
},
}