-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlog.py
76 lines (67 loc) · 2.26 KB
/
log.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import os
import logging
from logging.handlers import RotatingFileHandler
import time
# Constants
LOG_DIR = "logs"
USER_LOG_DIR = os.path.join(LOG_DIR, "users")
TURN_ENGINE_LOG_FILE = os.path.join(LOG_DIR, "turn_engine.log")
MAX_LOG_SIZE = 5 * 1024 * 1024 # 5 MB
BACKUP_COUNT = 3
# Ensure log directories exist
os.makedirs(LOG_DIR, exist_ok=True)
os.makedirs(USER_LOG_DIR, exist_ok=True)
# Configure logging format
log_format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
def get_user_logger(username):
"""
Get a logger for a specific user with file rotation.
"""
logger = logging.getLogger(f"user_{username}")
if not logger.handlers:
log_file = os.path.join(USER_LOG_DIR, f"{username}.log")
handler = RotatingFileHandler(log_file, maxBytes=MAX_LOG_SIZE, backupCount=BACKUP_COUNT)
handler.setFormatter(log_format)
logger.addHandler(handler)
logger.setLevel(logging.INFO)
return logger
def get_turn_engine_logger():
"""
Get the logger for the turn engine with file rotation.
"""
logger = logging.getLogger("turn_engine")
if not logger.handlers:
handler = RotatingFileHandler(TURN_ENGINE_LOG_FILE, maxBytes=MAX_LOG_SIZE, backupCount=BACKUP_COUNT)
handler.setFormatter(log_format)
logger.addHandler(handler)
logger.setLevel(logging.INFO)
return logger
def log_user_action(username, action, details=None):
"""
Log a user action.
"""
logger = get_user_logger(username)
log_message = f"Action: {action}"
if details:
log_message += f" - Details: {details}"
logger.info(log_message)
def log_turn_engine_event(event, details=None):
"""
Log a turn engine event.
"""
logger = get_turn_engine_logger()
log_message = f"Event: {event}"
if details:
log_message += f" - Details: {details}"
logger.info(log_message)
# Example usage
if __name__ == "__main__":
# Simulate some logs
log_user_action("alice", "login")
time.sleep(1)
log_user_action("bob", "move", "x: 10, y: 15")
time.sleep(1)
log_turn_engine_event("turn_processed", "Turn 42")
time.sleep(1)
log_user_action("alice", "logout")
print("Logging examples complete. Check the logs directory for output.")