Commit bb136d17 authored by Jalin's avatar Jalin

增加输出日志到文件

parent 33be8c92
...@@ -40,6 +40,10 @@ NOTIFICATION_BY_VOICE_CODE = 1 # 开启语音验证码 ...@@ -40,6 +40,10 @@ NOTIFICATION_BY_VOICE_CODE = 1 # 开启语音验证码
NOTIFICATION_API_APP_CODE = 'your app code' NOTIFICATION_API_APP_CODE = 'your app code'
NOTIFICATION_VOICE_CODE_PHONE = 'your phone' # 接受通知的手机号 NOTIFICATION_VOICE_CODE_PHONE = 'your phone' # 接受通知的手机号
# 输出日志到文件
OUT_PUT_LOG_TO_FILE_ENABLED = 0
OUT_PUT_LOG_TO_FILE_PATH = 'runtime/12306.log' # 日志目录
# 查询任务 # 查询任务
QUERY_JOBS = [ QUERY_JOBS = [
{ {
......
...@@ -34,6 +34,7 @@ def test(): ...@@ -34,6 +34,7 @@ def test():
:return: :return:
""" """
Const.IS_TEST = True Const.IS_TEST = True
config.OUT_PUT_LOG_TO_FILE_ENABLED = False
if '--test-notification' in sys.argv or '-n' in sys.argv: if '--test-notification' in sys.argv or '-n' in sys.argv:
Const.IS_TEST_NOTIFICATION = True Const.IS_TEST_NOTIFICATION = True
pass pass
......
...@@ -20,6 +20,10 @@ AUTO_CODE_ACCOUNT = { ...@@ -20,6 +20,10 @@ AUTO_CODE_ACCOUNT = {
'user': '', 'user': '',
'pwd': '' 'pwd': ''
} }
# 输出日志到文件
OUT_PUT_LOG_TO_FILE_ENABLED = 0
OUT_PUT_LOG_TO_FILE_PATH = 'runtime/12306.log'
SEAT_TYPES = { SEAT_TYPES = {
'特等座': 25, '特等座': 25,
......
...@@ -36,7 +36,7 @@ class AuthCode: ...@@ -36,7 +36,7 @@ class AuthCode:
return position return position
def retry_get_auth_code(self): # TODO 安全次数检测 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) time.sleep(self.retry_time)
return self.get_auth_code(self.session) return self.get_auth_code(self.session)
...@@ -66,7 +66,7 @@ class AuthCode: ...@@ -66,7 +66,7 @@ class AuthCode:
return True return True
else: else:
UserLog.add_quick_log( 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() self.session.cookies.clear_session_cookies()
return False return False
......
...@@ -3,6 +3,7 @@ import sys ...@@ -3,6 +3,7 @@ import sys
from py12306.helpers.func import * from py12306.helpers.func import *
class BaseLog: class BaseLog:
logs = [] logs = []
thread_logs = {} thread_logs = {}
...@@ -23,6 +24,17 @@ class BaseLog: ...@@ -23,6 +24,17 @@ class BaseLog:
@classmethod @classmethod
def flush(cls, sep='\n', end='\n', file=None, exit=False): def flush(cls, sep='\n', end='\n', file=None, exit=False):
self = cls() 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: if self.quick_log:
logs = self.quick_log logs = self.quick_log
else: else:
...@@ -30,7 +42,9 @@ class BaseLog: ...@@ -30,7 +42,9 @@ class BaseLog:
logs = self.logs logs = self.logs
else: else:
logs = self.thread_logs.get(current_thread_id()) 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: if self.quick_log:
self.quick_log = [] self.quick_log = []
else: else:
...@@ -38,11 +52,9 @@ class BaseLog: ...@@ -38,11 +52,9 @@ class BaseLog:
self.logs = [] self.logs = []
else: else:
if logs: del self.thread_logs[current_thread_id()] if logs: del self.thread_logs[current_thread_id()]
if exit:
sys.exit()
@classmethod @classmethod
def add_quick_log(cls, content = ''): def add_quick_log(cls, content=''):
self = cls() self = cls()
self.quick_log.append(content) self.quick_log.append(content)
return self return self
......
...@@ -37,8 +37,12 @@ class CommonLog(BaseLog): ...@@ -37,8 +37,12 @@ class CommonLog(BaseLog):
if Const.IS_TEST: if Const.IS_TEST:
self.add_quick_log() self.add_quick_log()
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()
self.flush() self.add_quick_log('日志已输出到文件中: {}'.format(config.OUT_PUT_LOG_TO_FILE_PATH))
self.add_quick_log()
self.flush(file=False)
return self return self
@classmethod @classmethod
...@@ -49,7 +53,7 @@ class CommonLog(BaseLog): ...@@ -49,7 +53,7 @@ class CommonLog(BaseLog):
disable = '未开启' disable = '未开启'
self.add_quick_log('**** 当前配置 ****') 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.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.QUERY_INTERVAL))
self.add_quick_log('用户心跳检测间隔: {} 秒'.format(config.USER_HEARTBEAT_INTERVAL)) self.add_quick_log('用户心跳检测间隔: {} 秒'.format(config.USER_HEARTBEAT_INTERVAL))
self.add_quick_log() self.add_quick_log()
......
...@@ -11,7 +11,7 @@ class UserLog(BaseLog): ...@@ -11,7 +11,7 @@ class UserLog(BaseLog):
MESSAGE_DOWNLAOD_AUTH_CODE_FAIL = '验证码下载失败 错误原因: {} {} 秒后重试' MESSAGE_DOWNLAOD_AUTH_CODE_FAIL = '验证码下载失败 错误原因: {} {} 秒后重试'
MESSAGE_DOWNLAODING_THE_CODE = '正在下载验证码...' MESSAGE_DOWNLAODING_THE_CODE = '正在下载验证码...'
MESSAGE_CODE_AUTH_FAIL = '验证码验证失败 错误原因: {} {} 秒后重试' MESSAGE_CODE_AUTH_FAIL = '验证码验证失败 错误原因: {}'
MESSAGE_CODE_AUTH_SUCCESS = '验证码验证成功 开始登录...' MESSAGE_CODE_AUTH_SUCCESS = '验证码验证成功 开始登录...'
MESSAGE_LOGIN_FAIL = '登录失败 错误原因: {}' MESSAGE_LOGIN_FAIL = '登录失败 错误原因: {}'
MESSAGE_LOADED_USER = '正在尝试恢复用户: {}' MESSAGE_LOADED_USER = '正在尝试恢复用户: {}'
......
...@@ -25,7 +25,7 @@ class User: ...@@ -25,7 +25,7 @@ class User:
self.init_users() self.init_users()
UserLog.print_init_users(users=self.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): def init_users(self):
accounts = config.USER_ACCOUNTS accounts = config.USER_ACCOUNTS
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment