forked from NAStool/nas-tools
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlog.py
83 lines (71 loc) · 3 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
77
78
79
80
81
82
83
import logging
import os
import threading
from logging.handlers import TimedRotatingFileHandler
import settings
from functions import mysql_exec_sql
lock = threading.Lock()
class Logger:
__instance = None
class LoggerToMysqlFilter(logging.Filter):
def filter(self, record):
rtext = record.msg
rname = record.name
rtype = record.levelname
if rtype == "INFO" or rtype == "ERROR":
sql = "INSERT INTO system_log \
(TYPE, NAME, TEXT, TIME) \
VALUES ('%s', '%s', '%s', now())" % \
(rtype, rname, rtext)
# 登记数据库
mysql_exec_sql(sql)
return True
def __init__(self):
self.logger = logging.Logger(__name__)
self.logger.setLevel(level=logging.INFO)
logtype = settings.get("root.logtype")
if logtype == "FILE":
# 记录日志到文件
logpath = settings.get("root.logpath")
if not os.path.exists(logpath):
os.makedirs(logpath)
log_file_handler = TimedRotatingFileHandler(filename=logpath + "/" + __name__ + ".txt", when="D", interval=1,
backupCount=2)
formatter = logging.Formatter(
'%(asctime)s\tFile \"%(filename)s\",line %(lineno)s\t%(levelname)s: %(message)s')
log_file_handler.setFormatter(formatter)
self.logger.addHandler(log_file_handler)
elif logtype == "MYSQL":
# 记录日志到MYSQL
mysql_filter = self.LoggerToMysqlFilter()
self.logger.addFilter(mysql_filter)
elif logtype == "SERVER":
logserver = settings.get("root.logserver")
logip = logserver.split(':')[0]
logport = int(logserver.split(':')[1])
log_server_handler = logging.handlers.SysLogHandler((logip, logport),
logging.handlers.SysLogHandler.LOG_USER)
formatter = logging.Formatter('%(filename)s: %(message)s')
log_server_handler.setFormatter(formatter)
self.logger.addHandler(log_server_handler)
else:
# 记录日志到终端
log_console_handler = logging.StreamHandler()
self.logger.addHandler(log_console_handler)
@staticmethod
def get_instance():
if Logger.__instance:
return Logger.__instance
try:
lock.acquire()
if not Logger.__instance:
Logger.__instance = Logger()
finally:
lock.release()
return Logger.__instance
def debug(text):
return Logger.get_instance().logger.debug(text)
def info(text):
return Logger.get_instance().logger.info(text)
def error(text):
return Logger.get_instance().logger.error(text)