This is a small toolkit for solving unsafe python mutliprocess logging (file logging and rotation)
Only for Python 3.5+
pip install mp-socket-logging
(child process)
+---------------+
+<------------+ client |
+-------+-+-+ +---------------+
| | (child process)
+ Socket | +---------------+
| +<------------+ client |
+---------+-+ +---------------+
|
| (main process)
| +---------------+ +--------------+
+-------------->+ server +--------->+ log file +
+---------------+ +--------------+
- The package uses unix socket for communication between processes.
- I/O operations will all be done by server in main process.
- Client Class itself is a logging.Handler which will be added to user's logger inside child process. Client handler will do the formatting and sending the logs to server side through socket.
- Inside child process, user can do logging as normal with the logger.
- start a server before in the main process
server_handler = ServerHandler(LOG_FILE, maxBytes=MAX_BYTES)
server_handler.setLevel(logging.INFO)
server = Server(server_handler, batch_size=BATCH_SIZE)
server.start()
- register the client to your logger inside multiprocessing worker for sending logs to server through socket
- you can define your own formatter to add to the handler (otherwise a default formatter will be used)
client_logger = logging.getLogger("client_logger")
formatter = logging.Formatter(
"%(asctime)s - %(name)s - %(filename)s- [%(levelname)s]: %(message)s"
)
register_handler(client_logger, logging_level=logging.INFO, formatter=formatter)
client_logger.setLevel(logging.INFO)