Skip to content

Commit

Permalink
feat: 支持在配置文件中开关日志文件保存
Browse files Browse the repository at this point in the history
  • Loading branch information
helloplhm-qwq committed Dec 17, 2023
1 parent 9b5f48c commit de26226
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 38 deletions.
4 changes: 2 additions & 2 deletions common/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ class ConfigReadException(Exception):
"https_addr": "https://127.0.0.1:7890",
},
"_proxy-desc": "代理配置,HTTP与HTTPS协议需分开配置",
"log_file": True,
"_log_file-desc": "是否开启日志文件",
},
"security": {
"rate_limit": {
Expand Down Expand Up @@ -165,8 +167,6 @@ class ConfigReadException(Exception):
"desc": "账号cookie数据,可以通过浏览器获取,需要vip账号来获取会员歌曲,如果没有请留为空值",
"cookie": ""
},
"reject_unmatcher_quality": True,
"_reject_unmatcher_quality-desc": "是否拒绝不匹配的音质(默认拒绝),网易云API在当前环境无法获取该音质时会自动将低音质,开启此功能将拒绝被降级的音质返回",
},
"mg": {
"desc": "咪咕音乐相关配置",
Expand Down
77 changes: 41 additions & 36 deletions common/log.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# ----------------------------------------
# - mode: python -
# - author: helloplhm-qwq -
# - name: log.py -
# - project: lx-music-api-server -
# - license: MIT -
# - mode: python -
# - author: helloplhm-qwq -
# - name: log.py -
# - project: lx-music-api-server -
# - license: MIT -
# ----------------------------------------
# This file is part of the "lx-music-api-server" project.

Expand All @@ -14,35 +14,39 @@
from pygments.lexers import PythonLexer
from pygments.formatters import TerminalFormatter
from .utils import filterFileName, addToGlobalNamespace
from .variable import debug_mode, log_length_limit
from .variable import debug_mode, log_length_limit, log_file

if not os.path.exists("logs"):
if ((not os.path.exists("logs")) and log_file):
try:
os.mkdir("logs")
except:
pass


def highlight_error(error):
# 对堆栈跟踪进行语法高亮
highlighted_traceback = highlight(error, PythonLexer(), TerminalFormatter())
highlighted_traceback = highlight(
error, PythonLexer(), TerminalFormatter())

# 返回语法高亮后的堆栈跟踪字符串
return str(highlighted_traceback)


class LogHelper(logging.Handler):
# 日志转接器
def __init__(self, custom_logger):
super().__init__()
self.custom_logger = custom_logger

def emit(self, record):
#print(record)
# print(record)
log_message = self.format(record)
self.custom_logger.info(log_message)


class log:
# 主类
def __init__(self, module_name = 'Not named logger', output_level = 'INFO', filename = ''):
def __init__(self, module_name='Not named logger', output_level='INFO', filename=''):
self._logger = logging.getLogger(module_name)
if not output_level.upper() in dir(logging):
raise NameError('Unknown loglevel: '+output_level)
Expand All @@ -60,31 +64,30 @@ def __init__(self, module_name = 'Not named logger', output_level = 'INFO', file
'ERROR': 'red',
'CRITICAL': 'red,bg_white',
})
file_formatter = logging.Formatter(
'%(asctime)s|[%(name)s/%(levelname)s]|%(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
if log_file:
file_formatter = logging.Formatter(
'%(asctime)s|[%(name)s/%(levelname)s]|%(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
if filename:
filename = filterFileName(filename)
else:
filename = './logs/' + module_name + '.log'
file_handler = logging.FileHandler(filename, encoding = "utf-8")
file_handler.setFormatter(file_formatter)
file_handler_ = logging.FileHandler("./logs/console_full.log", encoding = "utf-8")
file_handler_.setFormatter(file_formatter)
self._logger.addHandler(file_handler_)
self._logger.addHandler(file_handler)
if filename:
filename = filterFileName(filename)
else:
filename = './logs/' + module_name + '.log'
file_handler = logging.FileHandler(filename, encoding="utf-8")
file_handler.setFormatter(file_formatter)
file_handler_ = logging.FileHandler(
"./logs/console_full.log", encoding="utf-8")
file_handler_.setFormatter(file_formatter)
self._logger.addHandler(file_handler_)
self._logger.addHandler(file_handler)
console_handler = logging.StreamHandler()
console_handler.setFormatter(formatter)
self.module_name = module_name
self._logger.addHandler(console_handler)
self.debug_ = logging.getLogger(module_name + '_levelChangedMessage')
debug_handler = logging.StreamHandler()
debug_handler.setFormatter(formatter)
self.debug_.addHandler(debug_handler)
self.debug_.setLevel(logging.DEBUG)

def debug(self, message, allow_hidden = True):
def debug(self, message, allow_hidden=True):
if self.module_name == "flask" and "\n" in message:
if message.startswith("Error"):
return self._logger.error(message)
Expand All @@ -95,10 +98,10 @@ def debug(self, message, allow_hidden = True):
self._logger.info(m)
return
if len(str(message)) > log_length_limit and allow_hidden:
message = str(message)[:log_length_limit] + "..."
message = str(message)[:log_length_limit] + " ..."
self._logger.debug(message)

def log(self, message, allow_hidden = True):
def log(self, message, allow_hidden=True):
if self.module_name == "flask" and "\n" in message:
if message.startswith("Error"):
return self._logger.error(message)
Expand All @@ -109,10 +112,10 @@ def log(self, message, allow_hidden = True):
self._logger.info(m)
return
if len(str(message)) > log_length_limit and allow_hidden:
message = str(message)[:log_length_limit] + "..."
message = str(message)[:log_length_limit] + " ..."
self._logger.info(message)

def info(self, message, allow_hidden = True):
def info(self, message, allow_hidden=True):
if self.module_name == "flask" and "\n" in message:
if message.startswith("Error"):
return self._logger.error(message)
Expand Down Expand Up @@ -143,19 +146,21 @@ def critical(self, message):
def set_level(self, loglevel):
loglevel_upper = loglevel.upper()
if not loglevel_upper in dir(logging):
raise NameError('Unknown loglevel: '+loglevel)
self.debug_.debug('loglevel changed to: '+ loglevel_upper)
raise NameError('Unknown loglevel: ' + loglevel)
self._logger.setLevel(getattr(logging, loglevel_upper))

def getLogger(self):
return self._logger

def addHandler(self, handler):
self._logger.addHandler(handler)


printlogger = log('print')

def logprint(*args, sep = ' ', end = '', file = None, flush = None):
printlogger.info(sep.join(str(arg) for arg in args), allow_hidden = False)

def logprint(*args, sep=' ', end='', file=None, flush=None):
printlogger.info(sep.join(str(arg) for arg in args), allow_hidden=False)


addToGlobalNamespace('print', logprint)
1 change: 1 addition & 0 deletions common/variable.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ def _read_config(key):

debug_mode = debug_mode if (debug_mode := _read_config("common.debug_mode")) else False
log_length_limit = log_length_limit if (log_length_limit := _read_config("common.log_length_limit")) else 500
log_file = log_file if (log_file := _read_config("common.log_file")) else True
running = True
config = {}
workdir = os.getcwd()
Expand Down

0 comments on commit de26226

Please sign in to comment.