import os
import logging
from logentries import LogentriesHandler
import zmq
from common . logging_extra import SwagLogger , SwagFormatter
def get_le_handler ( ) :
# setup logentries. we forward log messages to it
le_token = " e8549616-0798-4d7e-a2ca-2513ae81fa17 "
return LogentriesHandler ( le_token , use_tls = False , verbose = False )
class LogMessageHandler ( logging . Handler ) :
def __init__ ( self , formatter ) :
logging . Handler . __init__ ( self )
self . setFormatter ( formatter )
self . pid = None
def connect ( self ) :
self . zctx = zmq . Context ( )
self . sock = self . zctx . socket ( zmq . PUSH )
self . sock . setsockopt ( zmq . LINGER , 10 )
self . sock . connect ( " ipc:///tmp/logmessage " )
self . pid = os . getpid ( )
def emit ( self , record ) :
if os . getpid ( ) != self . pid :
self . connect ( )
msg = self . format ( record ) . rstrip ( ' \n ' )
# print("SEND".format(repr(msg)))
try :
s = chr ( record . levelno ) + msg
self . sock . send ( s . encode ( ' utf8 ' ) , zmq . NOBLOCK )
except zmq . error . Again :
# drop :/
pass
def add_logentries_handler ( log ) :
""" Function to add the logentries handler to swaglog.
This can be used to send logs when logmessaged is not running . """
handler = get_le_handler ( )
handler . setFormatter ( SwagFormatter ( log ) )
log . addHandler ( handler )
cloudlog = log = SwagLogger ( )
log . setLevel ( logging . DEBUG )
outhandler = logging . StreamHandler ( )
log . addHandler ( outhandler )
log . addHandler ( LogMessageHandler ( SwagFormatter ( log ) ) )