-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlogger_config.py
More file actions
79 lines (62 loc) · 2.09 KB
/
Copy pathlogger_config.py
File metadata and controls
79 lines (62 loc) · 2.09 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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
"""
Centralized logging configuration for LedgerLens.
Provides structured logging with file rotation.
"""
import logging
import logging.handlers
from pathlib import Path
def setup_logging(log_level=logging.INFO):
"""
Configure structured logging with file rotation.
Args:
log_level: Logging level (default: INFO)
"""
# Create logs directory
log_dir = Path("logs")
log_dir.mkdir(exist_ok=True)
# Configure formatters
# JSON-like structured format for easy parsing
file_formatter = logging.Formatter(
'{"timestamp":"%(asctime)s","level":"%(levelname)s","logger":"%(name)s","message":"%(message)s","function":"%(funcName)s","line":%(lineno)d}'
)
# Simpler format for console
console_formatter = logging.Formatter(
'%(asctime)s - %(name)s - %(levelname)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
# File handlers with rotation
app_handler = logging.handlers.TimedRotatingFileHandler(
log_dir / "app.log",
when="midnight",
interval=1,
backupCount=30
)
app_handler.setFormatter(file_formatter)
app_handler.setLevel(logging.DEBUG)
error_handler = logging.FileHandler(log_dir / "error.log")
error_handler.setFormatter(file_formatter)
error_handler.setLevel(logging.ERROR)
console_handler = logging.StreamHandler()
console_handler.setFormatter(console_formatter)
console_handler.setLevel(logging.INFO)
# Configure root logger
root_logger = logging.getLogger()
root_logger.setLevel(log_level)
# Remove existing handlers to avoid duplicates
root_logger.handlers.clear()
# Add handlers
root_logger.addHandler(app_handler)
root_logger.addHandler(error_handler)
root_logger.addHandler(console_handler)
# Log initialization
root_logger.info("Logging system initialized")
root_logger.info(f"Log directory: {log_dir.absolute()}")
def get_logger(name):
"""
Get a logger instance.
Args:
name: Logger name (typically __name__)
Returns:
Logger instance
"""
return logging.getLogger(name)