增加输出日志到文件

This commit is contained in:
Jalin
2019-01-08 12:08:06 +08:00
parent 33be8c9237
commit bb136d17ba
8 changed files with 35 additions and 10 deletions

View File

@@ -40,6 +40,10 @@ NOTIFICATION_BY_VOICE_CODE = 1 # 开启语音验证码
NOTIFICATION_API_APP_CODE = 'your app code'
NOTIFICATION_VOICE_CODE_PHONE = 'your phone' # 接受通知的手机号
# 输出日志到文件
OUT_PUT_LOG_TO_FILE_ENABLED = 0
OUT_PUT_LOG_TO_FILE_PATH = 'runtime/12306.log' # 日志目录
# 查询任务
QUERY_JOBS = [
{

View File

@@ -34,6 +34,7 @@ def test():
:return:
"""
Const.IS_TEST = True
config.OUT_PUT_LOG_TO_FILE_ENABLED = False
if '--test-notification' in sys.argv or '-n' in sys.argv:
Const.IS_TEST_NOTIFICATION = True
pass

View File

@@ -20,6 +20,10 @@ AUTO_CODE_ACCOUNT = {
'user': '',
'pwd': ''
}
# 输出日志到文件
OUT_PUT_LOG_TO_FILE_ENABLED = 0
OUT_PUT_LOG_TO_FILE_PATH = 'runtime/12306.log'
SEAT_TYPES = {
'特等座': 25,

View File

@@ -36,7 +36,7 @@ class AuthCode:
return position
def retry_get_auth_code(self): # TODO 安全次数检测
CommonLog.add_quick_log(CommonLog.MESSAGE_RETRY_AUTH_CODE.format(self.retry_time))
CommonLog.add_quick_log(CommonLog.MESSAGE_RETRY_AUTH_CODE.format(self.retry_time)).flush()
time.sleep(self.retry_time)
return self.get_auth_code(self.session)
@@ -66,7 +66,7 @@ class AuthCode:
return True
else:
UserLog.add_quick_log(
UserLog.MESSAGE_CODE_AUTH_FAIL.format(result.get('result_message'), self.retry_time)).flush()
UserLog.MESSAGE_CODE_AUTH_FAIL.format(result.get('result_message'))).flush()
self.session.cookies.clear_session_cookies()
return False

View File

@@ -3,6 +3,7 @@ import sys
from py12306.helpers.func import *
class BaseLog:
logs = []
thread_logs = {}
@@ -23,6 +24,17 @@ class BaseLog:
@classmethod
def flush(cls, sep='\n', end='\n', file=None, exit=False):
self = cls()
logs = self.get_logs()
# 输出到文件
if file == None and config.OUT_PUT_LOG_TO_FILE_ENABLED: # TODO 文件无法写入友好提示
file = open(config.OUT_PUT_LOG_TO_FILE_PATH, 'a')
if not file: file = None
print(*logs, sep=sep, end=end, file=file)
self.empty_logs(logs)
if exit:
sys.exit()
def get_logs(self):
if self.quick_log:
logs = self.quick_log
else:
@@ -30,7 +42,9 @@ class BaseLog:
logs = self.logs
else:
logs = self.thread_logs.get(current_thread_id())
print(*logs, sep=sep, end=end, file=file)
return logs
def empty_logs(self, logs):
if self.quick_log:
self.quick_log = []
else:
@@ -38,11 +52,9 @@ class BaseLog:
self.logs = []
else:
if logs: del self.thread_logs[current_thread_id()]
if exit:
sys.exit()
@classmethod
def add_quick_log(cls, content = ''):
def add_quick_log(cls, content=''):
self = cls()
self.quick_log.append(content)
return self

View File

@@ -37,8 +37,12 @@ class CommonLog(BaseLog):
if Const.IS_TEST:
self.add_quick_log()
self.add_quick_log('当前为测试模式,程序运行完成后自动结束')
if not Const.IS_TEST and config.OUT_PUT_LOG_TO_FILE_ENABLED:
self.add_quick_log()
self.add_quick_log('日志已输出到文件中: {}'.format(config.OUT_PUT_LOG_TO_FILE_PATH))
self.add_quick_log()
self.flush()
self.flush(file=False)
return self
@classmethod
@@ -49,7 +53,7 @@ class CommonLog(BaseLog):
disable = '未开启'
self.add_quick_log('**** 当前配置 ****')
self.add_quick_log('多线程查询: {}'.format(get_true_false_text(config.QUERY_JOB_THREAD_ENABLED, enable, disable)))
self.add_quick_log('语音验证码: {}'.format(get_true_false_text(config.QUERY_JOB_THREAD_ENABLED, enable, disable)))
self.add_quick_log('语音验证码: {}'.format(get_true_false_text(config.NOTIFICATION_BY_VOICE_CODE, enable, disable)))
self.add_quick_log('查询间隔: {}'.format(config.QUERY_INTERVAL))
self.add_quick_log('用户心跳检测间隔: {}'.format(config.USER_HEARTBEAT_INTERVAL))
self.add_quick_log()

View File

@@ -11,7 +11,7 @@ class UserLog(BaseLog):
MESSAGE_DOWNLAOD_AUTH_CODE_FAIL = '验证码下载失败 错误原因: {} {} 秒后重试'
MESSAGE_DOWNLAODING_THE_CODE = '正在下载验证码...'
MESSAGE_CODE_AUTH_FAIL = '验证码验证失败 错误原因: {} {} 秒后重试'
MESSAGE_CODE_AUTH_FAIL = '验证码验证失败 错误原因: {}'
MESSAGE_CODE_AUTH_SUCCESS = '验证码验证成功 开始登录...'
MESSAGE_LOGIN_FAIL = '登录失败 错误原因: {}'
MESSAGE_LOADED_USER = '正在尝试恢复用户: {}'

View File

@@ -25,7 +25,7 @@ class User:
self.init_users()
UserLog.print_init_users(users=self.users)
# 多线程维护用户
create_thread_and_run(jobs=self.users, callback_name='run', wait=False)
create_thread_and_run(jobs=self.users, callback_name='run', wait=Const.IS_TEST)
def init_users(self):
accounts = config.USER_ACCOUNTS