#!/usr/bin/env python3 import zmq from typing import NoReturn import cereal.messaging as messaging from common.logging_extra import SwagLogFileFormatter from system.swaglog import get_file_handler def main() -> NoReturn: log_handler = get_file_handler() log_handler.setFormatter(SwagLogFileFormatter(None)) log_level = 20 # logging.INFO ctx = zmq.Context.instance() sock = ctx.socket(zmq.PULL) sock.bind("ipc:///tmp/logmessage") # and we publish them log_message_sock = messaging.pub_sock('logMessage') error_log_message_sock = messaging.pub_sock('errorLogMessage') try: while True: dat = b''.join(sock.recv_multipart()) level = dat[0] record = dat[1:].decode("utf-8") if level >= log_level: log_handler.emit(record) if len(record) > 2*1024*1024: print("WARNING: log too big to publish", len(record)) print(print(record[:100])) continue # then we publish them msg = messaging.new_message() msg.logMessage = record log_message_sock.send(msg.to_bytes()) if level >= 40: # logging.ERROR msg = messaging.new_message() msg.errorLogMessage = record error_log_message_sock.send(msg.to_bytes()) finally: sock.close() ctx.term() # can hit this if interrupted during a rollover try: log_handler.close() except ValueError: pass if __name__ == "__main__": main()