-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlogging_config.py
More file actions
55 lines (43 loc) · 1.53 KB
/
Copy pathlogging_config.py
File metadata and controls
55 lines (43 loc) · 1.53 KB
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
import os
import logging
from logging.handlers import RotatingFileHandler
def setup_logging(log_level=logging.INFO):
"""
Configure application-wide logging
Args:
log_level: The minimum log level to capture (default: INFO)
Returns:
logger: Configured logger instance
"""
# Create logs directory if it doesn't exist
log_directory = "logs"
os.makedirs(log_directory, exist_ok=True)
log_file = os.path.join(log_directory, "app.log")
# Create formatter for consistent log formatting
file_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# Set up rotating file handler (10 MB per file, keep 5 backup files)
file_handler = RotatingFileHandler(
log_file,
maxBytes=10*1024*1024, # 10 MB
backupCount=5
)
file_handler.setFormatter(file_formatter)
# Configure root logger
root_logger = logging.getLogger()
root_logger.setLevel(log_level)
# Remove any existing handlers to prevent duplicates
for handler in root_logger.handlers[:]:
if isinstance(handler, logging.StreamHandler):
root_logger.removeHandler(handler)
# Add the file handler
root_logger.addHandler(file_handler)
return root_logger
def get_logger(name):
"""
Get a logger for a specific module
Args:
name: Usually __name__ from the calling module
Returns:
A logger instance with the specified name
"""
return logging.getLogger(name)