-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlog.py
More file actions
55 lines (46 loc) · 1.61 KB
/
log.py
File metadata and controls
55 lines (46 loc) · 1.61 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 logging
import datetime
from sys import stdout
from logging import INFO, DEBUG, ERROR, CRITICAL
__all__ = (
'kstnow',
'init_logger',
'INFO',
'DEBUG',
'ERROR',
'CRITICAL'
)
def kstnow():
"""
Get current datetime as kst.
To reduce dependency, I just used datetime.timezone object.
:return: datetime.datetime object with tzinfo = timezone('Asia/Seoul')
"""
utcnow = datetime.datetime.utcnow().replace(tzinfo=datetime.timezone.utc)
return utcnow.astimezone(datetime.timezone(datetime.timedelta(hours=9), name='Asia/Seoul'))
def _get_log_file_name() -> str:
"""
Get log file name using current kst datetime.
:return: log file name ends with '.txt'
"""
return f'{kstnow().isoformat(timespec="seconds").replace(":", "-")}.txt'
def init_logger(name: str, level: int = logging.INFO) -> logging.Logger:
logger = logging.getLogger(name)
logger.setLevel(level)
stream_handler = logging.StreamHandler(stream=stdout)
fmt = logging.Formatter(
style='{',
fmt='[{asctime}] [{levelname}] {name}: {message}'
)
stream_handler.setFormatter(fmt)
logger.addHandler(stream_handler)
file_handler = logging.FileHandler(f'./logs/{_get_log_file_name()}', encoding='utf-8')
file_handler.setFormatter(fmt)
logger.addHandler(file_handler)
return logger
def get_initialized_logger(name: str):
logger = logging.getLogger(name)
if len(logger.handlers) != 0:
raise ValueError(f'Logger named {name} is not initialized!')
elif len(logger.handlers) > 2:
raise ValueError(f'Logger named {name} is malformed!')