diff --git a/evio/broker/broker.py b/evio/broker/broker.py index 592fc00..213f981 100644 --- a/evio/broker/broker.py +++ b/evio/broker/broker.py @@ -184,7 +184,7 @@ class Broker: console_handler.setFormatter(logging.Formatter("evio: %(message)s")) console_handler.setLevel(logging.ERROR) handlers.append(console_handler) - que = queue.Queue(-1) + que = queue.Queue() que_handler = QueueHandler(que) self._que_listener = QueueListener(que, *handlers, respect_handler_level=True) self.logger = logging.getLogger() @@ -208,7 +208,7 @@ class Broker: ) file_handler.setFormatter(formatter) file_handler.setLevel(level) - que = queue.Queue(100) + que = queue.Queue() que_handler = QueueHandler(que) que_listener = QueueListener(que, file_handler, respect_handler_level=True) logger = logging.getLogger(cm_name[0]) diff --git a/evio/controllers/bounded_flood.py b/evio/controllers/bounded_flood.py index 151e79d..0ddbe42 100644 --- a/evio/controllers/bounded_flood.py +++ b/evio/controllers/bounded_flood.py @@ -23,8 +23,8 @@ import hashlib import json import logging -import logging.handlers as lh import os +import queue import struct import uuid from collections import namedtuple @@ -32,6 +32,7 @@ from collections import namedtuple # from collections.abc import MutableSet from datetime import datetime from distutils import spawn +from logging.handlers import QueueHandler, QueueListener, RotatingFileHandler from typing import Optional, Set, Tuple, Union import eventlet @@ -59,7 +60,7 @@ DataplaneTypes = namedtuple( DATAPLANE_TYPES: DataplaneTypes = DataplaneTypes() LOG_DIR = "/var/log/evio/" -LOG_FILENAME = "bf.log" +LOG_FILENAME = "bounded_flood.log" LOG_LEVEL = "INFO" DEMAND_THRESHOLD = "10M" FLOW_IDLE_TIMEOUT = 60 @@ -860,6 +861,7 @@ class BoundedFlood(app_manager.RyuApp): self.evio_portal.terminate() hub.joinall(self._monitors) self.logger.info("BoundedFlood terminated") + self._que_listener.stop() logging.shutdown() @set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER) @@ -1006,15 +1008,13 @@ class BoundedFlood(app_manager.RyuApp): self._broadcast_frame(msg.datapath, pkt, in_port, msg) elif in_port not in sw.leaf_ports and is_multiricepient(eth.dst): self.logger.info( - "Raw multirecipient frame ingressed on peer port, discarding frame. " - "Ingress=%s/%s", + "Discarding ingressed multirecipient frame on peer port %s/%s", sw.name, in_port, ) else: self.logger.info( - "No forwarding route to %s in LT, discarding frame. " - "Ingress=%s/%s", + "No forwarding route to %s in LT, discarding frame. Ingress=%s/%s", eth.dst, sw.name, in_port, @@ -1157,17 +1157,13 @@ class BoundedFlood(app_manager.RyuApp): ################################################################################## def _setup_logger(self): - fqname = os.path.join( - self.config.get("LogDir", LOG_DIR), - self.config.get("LogFilename", LOG_FILENAME), - ) - if os.path.isfile(fqname): - os.remove(fqname) - self.logger = logging.getLogger(self.LOGGER_NAME) - level = getattr(logging, self.config.get("LogLevel", LOG_LEVEL)) - self.logger.setLevel(level) - handler = lh.RotatingFileHandler( - filename=fqname, + cm_name = ("BoundedFlood", LOG_FILENAME) + logname = os.path.join(self.config.get("LogDir", LOG_DIR), f"{cm_name[1]}") + # if os.path.isfile(logname): + # os.remove(logname) + level = self.config.get("LogLevel", LOG_LEVEL) + file_handler = RotatingFileHandler( + filename=logname, maxBytes=self.config.get("MaxBytes", MAX_FILE_SIZE_BYTES), backupCount=self.config.get("BackupCount", BACKUP_COUNT), ) @@ -1175,9 +1171,17 @@ class BoundedFlood(app_manager.RyuApp): "[%(asctime)s.%(msecs)03d] %(levelname)s %(message)s", datefmt="%Y%m%d %H:%M:%S", ) - logging.Formatter.converter = time.localtime - handler.setFormatter(formatter) - self.logger.addHandler(handler) + file_handler.setFormatter(formatter) + file_handler.setLevel(level) + que = queue.Queue() + que_handler = QueueHandler(que) + self._que_listener = QueueListener( + que, file_handler, respect_handler_level=True + ) + self.logger = logging.getLogger(cm_name[0]) + self.logger.setLevel(level) + self.logger.addHandler(que_handler) + self._que_listener.start() def _load_config(self): if CONF["bf"]["config_file"]: