-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlogger.py
57 lines (46 loc) · 1.76 KB
/
logger.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
import logging
import os
from datetime import datetime
def setup_logger(name: str) -> logging.Logger:
"""
Creates and configures a logger instance.
Args:
name (str): The name of the logger (typically __name__ from the calling module)
Returns:
logging.Logger: Configured logger instance
"""
# Create logs directory if it doesn't exist
if not os.path.exists('logs'):
os.makedirs('logs')
# Get the filename from the logger name and create its directory
filename = name.split('.')[-1] # Gets the last part of the module path
if filename != '__main__':
log_dir = os.path.join('logs', filename)
if not os.path.exists(log_dir):
os.makedirs(log_dir)
else:
log_dir = 'logs'
# Create logger
logger = logging.getLogger(name)
# Only add handlers if the logger doesn't already have them
if not logger.handlers:
logger.setLevel(logging.INFO)
# Create handlers
console_handler = logging.StreamHandler()
file_handler = logging.FileHandler(
filename=os.path.join(log_dir, f'{datetime.now().strftime("%Y-%m-%d")}.log'),
mode='a'
)
# Set levels
console_handler.setLevel(logging.INFO)
file_handler.setLevel(logging.INFO)
# Create formatters and add it to handlers
log_format = logging.Formatter(
'%(asctime)s - %(filename)s - %(levelname)s - %(funcName)s - %(message)s'
)
console_handler.setFormatter(log_format)
file_handler.setFormatter(log_format)
# Add handlers to the logger
logger.addHandler(console_handler)
logger.addHandler(file_handler)
return logger