Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sagemath
GitHub Repository: sagemath/sagecell
Path: blob/master/log.py
447 views
1
import json
2
import logging
3
from logging.handlers import SysLogHandler
4
import sys
5
6
7
LOG_LEVEL = logging.DEBUG
8
LOG_VERSION = 0
9
10
11
class StatsMessage(object):
12
def __init__(self, kernel_id, code, execute_type, remote_ip, referer):
13
self.msg = [LOG_VERSION, remote_ip, referer, execute_type, kernel_id, code]
14
def __str__(self):
15
return json.dumps(self.msg)
16
17
18
syslog = SysLogHandler(address="/dev/log", facility=SysLogHandler.LOG_LOCAL3)
19
syslog.setFormatter(logging.Formatter(
20
"%(asctime)s %(process)5d %(name)-28s %(message)s"))
21
22
# Default logger for SageCell
23
logger = logging.getLogger("sagecell")
24
permalink_logger = logger.getChild("permalink")
25
stats_logger = logger.getChild("stats")
26
# Intermediate loggers to be parents for actual receivers and kernels.
27
kernel_logger = logger.getChild("kernel")
28
provider_logger = logger.getChild("provider")
29
30
root = logging.getLogger()
31
root.addHandler(syslog)
32
root.setLevel(LOG_LEVEL)
33
34
class TornadoFilter(logging.Filter):
35
"""
36
Drop HA-Proxy healthchecks.
37
"""
38
def filter(self, record):
39
return len(record.args) != 3 or \
40
record.args[:2] != (200, 'OPTIONS / (10.0.3.1)')
41
42
logging.getLogger("tornado.access").addFilter(TornadoFilter())
43
44
45
class StdLog(object):
46
"""
47
A file-like object for sending stdout/stderr to a log.
48
"""
49
def __init__(self, logger, level):
50
self.logger = logger
51
self.level = level
52
53
def fileno(self):
54
return 1
55
56
def flush(self):
57
pass
58
59
def write(self, data):
60
self.logger.log(self.level, data)
61
62
63
def std_redirect(logger):
64
"""
65
Redirect stdout and stderr to the given logger.
66
67
Also set their underscore versions to make IPython happier.
68
"""
69
sys.__stdout__ = sys.stdout = StdLog(
70
logger.getChild("stdout"), logging.DEBUG)
71
sys.__stderr__ = sys.stderr = StdLog(
72
logger.getChild("stderr"), logging.WARNING)
73
74