mirror of
https://github.com/wassname/catalyst.git
synced 2026-09-12 12:12:04 +08:00
fixed logging bugs, added a DONE signal for logging.
This commit is contained in:
+24
-21
@@ -4,13 +4,16 @@ import pytz
|
||||
import datetime
|
||||
|
||||
from logbook import NOTSET
|
||||
from logbook.handlers import Handler
|
||||
from logbook.handlers import Handler, FileHandler
|
||||
|
||||
from zipline.protocol import LOG_FRAME, LOG_FIELDS, \
|
||||
LOG_EXTRA_FIELDS
|
||||
|
||||
from contextlib import contextmanager
|
||||
|
||||
|
||||
log = logbook.Logger("LogUtils")
|
||||
|
||||
class redirecter(object):
|
||||
def __init__(self, logger, name):
|
||||
self.logger = logger
|
||||
@@ -30,10 +33,10 @@ class redirecter(object):
|
||||
self.logger.error(out_form)
|
||||
self.buffer = bytes()
|
||||
|
||||
class log_redirecter(object):
|
||||
class log_redirecter(object):
|
||||
def __init__(self, logger):
|
||||
self.logger = logger
|
||||
|
||||
|
||||
def write(self, line):
|
||||
#Absorb blank lines from print statements.
|
||||
if line =='\n':
|
||||
@@ -42,7 +45,7 @@ class log_redirecter(object):
|
||||
else:
|
||||
#TODO: add logic to guarantee we made this
|
||||
self.logger.info(line.strip('\n'))
|
||||
|
||||
|
||||
def flush(self, final=False):
|
||||
pass
|
||||
|
||||
@@ -70,7 +73,7 @@ def stdout_only_pipe(logger, pipe_name):
|
||||
import sys
|
||||
orig_fd = sys.stdout
|
||||
sys.stdout = log_redirecter(logger)
|
||||
|
||||
|
||||
yield
|
||||
sys.stdout.flush()
|
||||
sys.stdout = orig_fd
|
||||
@@ -82,7 +85,7 @@ class ZeroMQLogHandler(Handler):
|
||||
Setup is similar to logbook.queues.ZeroMQHandler, except we connect
|
||||
instead of binding and we extract record fields into a dict.
|
||||
"""
|
||||
|
||||
|
||||
def __init__(self, uri=None, level=NOTSET, filter=None, bubble=False,
|
||||
context=None, fds = LOG_FIELDS, extra_fds = LOG_EXTRA_FIELDS):
|
||||
Handler.__init__(self, level, filter, bubble)
|
||||
@@ -109,21 +112,21 @@ class ZeroMQLogHandler(Handler):
|
||||
fields to make json happy.
|
||||
"""
|
||||
from zipline.utils.date_utils import EPOCH
|
||||
|
||||
|
||||
#Needed to extract record info from dictionary.
|
||||
record.pull_information()
|
||||
|
||||
#Logbook stores record times as datetime objects, which
|
||||
#can't be serialized by JSON, so we need to convert to
|
||||
#can't be serialized by JSON, so we need to convert to
|
||||
#unix epoch representation.
|
||||
|
||||
if record.time:
|
||||
assert isinstance(record.time, datetime.datetime)
|
||||
|
||||
|
||||
time = record.time.replace(tzinfo = pytz.utc)
|
||||
#logbook measures time in utc already, no need to convert.
|
||||
record.time = EPOCH(time)
|
||||
|
||||
|
||||
#Do the same if algo_dt is a datetime object.
|
||||
if record.extra.has_key('algo_dt'):
|
||||
algo_dt = record.extra['algo_dt']
|
||||
@@ -131,31 +134,31 @@ class ZeroMQLogHandler(Handler):
|
||||
if isinstance(algo_dt, datetime.datetime):
|
||||
algo_dt = EPOCH(algo_dt.replace(tzinfo = pytz.utc))
|
||||
record.extra['algo_dt'] = algo_dt
|
||||
|
||||
|
||||
data = {}
|
||||
|
||||
|
||||
#Extract all the fields we care about from LogRecord's internal
|
||||
#dictionary.
|
||||
#dictionary.
|
||||
|
||||
for field in iter(self.fds):
|
||||
if record.__dict__.has_key(field):
|
||||
data[field] = record.__dict__[field]
|
||||
else:
|
||||
data[field] = None
|
||||
|
||||
|
||||
for field in iter(self.extra_fds):
|
||||
if record.extra.has_key(field):
|
||||
data[field] = record.extra[field]
|
||||
else:
|
||||
data[field] = None
|
||||
return data
|
||||
|
||||
|
||||
def emit(self, record):
|
||||
"""Extract relevant fields and send info as JSON over a zmq socket."""
|
||||
payload = self.export_record(record)
|
||||
self.socket.send(LOG_FRAME(payload))
|
||||
|
||||
logger = FileHandler('/var/log/zipline/zipline.log')
|
||||
with logger.applicationbound():
|
||||
payload = self.export_record(record)
|
||||
self.socket.send(LOG_FRAME(payload))
|
||||
|
||||
def close(self):
|
||||
#self.socket.close()
|
||||
pass
|
||||
|
||||
self.socket.close()
|
||||
|
||||
Reference in New Issue
Block a user