import logging
import queue
import json
import time
# Configure logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
def encode_queue_output(q, log_file="queue_monitor.log"):
"""
Encodes output from a queue for monitoring purposes, including error logging.
Args:
q (queue.Queue): The queue to monitor.
log_file (str): The name of the log file.
"""
try:
while True:
try:
item = q.get(timeout=1) # Get item from queue with timeout
# Process the item and encode
try:
encoded_item = json.dumps(item) # Convert to JSON string
log_message = f"Queue: {q.qsize()}, Item: {encoded_item}"
logging.info(log_message)
except Exception as e:
logging.error(f"Error encoding item: {e}")
logging.error(f"Item: {item}")
except queue.Empty:
# Queue is empty, check again
pass
except Exception as e:
logging.error(f"Unexpected error: {e}")
q.task_done() # Signal that the item is processed
time.sleep(0.1) # Small delay to avoid busy-waiting
except KeyboardInterrupt:
logging.info("Monitoring stopped by user.")
except Exception as e:
logging.critical(f"Unhandled error in monitoring loop: {e}")
if __name__ == '__main__':
# Example Usage
my_queue = queue.Queue()
# Populate the queue with some dummy data
for i in range(5):
my_queue.put(f"Data {i}")
# Start monitoring the queue
encode_queue_output(my_queue)
Add your comment