xtn-tools-pro 1.0.0.1.9__py3-none-any.whl → 1.0.0.2.1__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- xtn_tools_pro/db/MongoDB.py +7 -0
- xtn_tools_pro/db/RedisDB.py +2 -0
- xtn_tools_pro/utils/file_utils.py +9 -0
- xtn_tools_pro/utils/log.py +46 -8
- {xtn_tools_pro-1.0.0.1.9.dist-info → xtn_tools_pro-1.0.0.2.1.dist-info}/METADATA +2 -2
- {xtn_tools_pro-1.0.0.1.9.dist-info → xtn_tools_pro-1.0.0.2.1.dist-info}/RECORD +9 -9
- {xtn_tools_pro-1.0.0.1.9.dist-info → xtn_tools_pro-1.0.0.2.1.dist-info}/LICENSE +0 -0
- {xtn_tools_pro-1.0.0.1.9.dist-info → xtn_tools_pro-1.0.0.2.1.dist-info}/WHEEL +0 -0
- {xtn_tools_pro-1.0.0.1.9.dist-info → xtn_tools_pro-1.0.0.2.1.dist-info}/top_level.txt +0 -0
xtn_tools_pro/db/MongoDB.py
CHANGED
xtn_tools_pro/db/RedisDB.py
CHANGED
@@ -35,6 +35,15 @@ def get_file_check_filename(file_name):
|
|
35
35
|
sanitized_filename = sanitized_filename[:max_length]
|
36
36
|
return sanitized_filename
|
37
37
|
|
38
|
+
def mkdirs_dir(file_path):
|
39
|
+
"""
|
40
|
+
传入一个文件路径创建对应的文件夹,如果某一段不存在则一路创建下去
|
41
|
+
:param file_path:
|
42
|
+
:return:
|
43
|
+
"""
|
44
|
+
directory = os.path.dirname(file_path)
|
45
|
+
if not os.path.exists(directory):
|
46
|
+
os.makedirs(directory)
|
38
47
|
|
39
48
|
if __name__ == '__main__':
|
40
49
|
pass
|
xtn_tools_pro/utils/log.py
CHANGED
@@ -13,6 +13,7 @@ import sys
|
|
13
13
|
import inspect
|
14
14
|
import logging
|
15
15
|
from logging.handlers import BaseRotatingHandler
|
16
|
+
from xtn_tools_pro.utils.file_utils import mkdirs_dir
|
16
17
|
from xtn_tools_pro.utils.time_utils import get_time_timestamp_to_datestr
|
17
18
|
|
18
19
|
|
@@ -77,7 +78,10 @@ class Log:
|
|
77
78
|
is_write_to_file=False,
|
78
79
|
color=True,
|
79
80
|
mode='a',
|
80
|
-
max_bytes=
|
81
|
+
max_bytes=1024000000,
|
82
|
+
backup_count=0,
|
83
|
+
encoding="utf-8",
|
84
|
+
save_time_log_path=None):
|
81
85
|
"""
|
82
86
|
:param name: log名
|
83
87
|
:param path: log文件存储路径 如 D://xxx.log
|
@@ -89,18 +93,27 @@ class Log:
|
|
89
93
|
:param max_bytes: 每个日志文件的最大字节数
|
90
94
|
:param backup_count: 日志文件保留数量
|
91
95
|
:param encoding: 日志文件编码
|
96
|
+
:param save_time_log_path: 保存时间日志的路径 './logs'
|
92
97
|
|
93
98
|
"""
|
94
99
|
# 创建logger对象
|
95
100
|
self.logger = logging.getLogger(name)
|
96
101
|
# 设置日志等级
|
97
102
|
self.logger.setLevel(log_level.upper())
|
103
|
+
self.save_time_log_path = save_time_log_path
|
104
|
+
if save_time_log_path:
|
105
|
+
# 记录当前的日期,用于之后检查日期是否已经改变
|
106
|
+
self.current_date = get_time_timestamp_to_datestr(format="%Y_%m_%d")
|
107
|
+
# 记录日志文件的路径模板,用于之后创建新的日志文件
|
108
|
+
self.path_template = self.path_template = f"{save_time_log_path}/{{date}}/{name}.log"
|
109
|
+
path = self.path_template.format(date=self.current_date)
|
110
|
+
mkdirs_dir(self.path_template.format(date=self.current_date))
|
98
111
|
|
99
112
|
# 创建日志格式化器
|
100
113
|
# formatter = logging.Formatter('[%(now_datestr)s] [%(levelname)s] [%(func_name)s] - %(message)s') # 原
|
101
114
|
# formatter = logging.Formatter('\033[1m%(now_datestr)s] [%(levelname)s] [%(func_name)s] - %(message)s\033[0m') #加粗
|
102
115
|
formatter = logging.Formatter(
|
103
|
-
'
|
116
|
+
'[%(now_datestr)s] | %(levelname)-8s | [%(func_name)s] - %(message)s') # 加粗对齐
|
104
117
|
|
105
118
|
# formatter = BoldFormatter('[%(now_datestr)s] [%(levelname)s] [%(func_name)s] - %(message)s') # 加粗
|
106
119
|
|
@@ -139,31 +152,53 @@ class Log:
|
|
139
152
|
'CRITICAL': 'bold_red',
|
140
153
|
}
|
141
154
|
color_formatter = ColoredFormatter(
|
142
|
-
'\033[1m%(log_color)s[%(now_datestr)s] | %(levelname)-8s | [%(func_name)s] - %(message)s\033[0m',
|
155
|
+
# '\033[1m%(log_color)s[%(now_datestr)s] | %(levelname)-8s | [%(func_name)s] - %(message)s\033[0m',
|
156
|
+
'%(log_color)s[%(now_datestr)s] | %(levelname)-8s | [%(func_name)s] - %(message)s',
|
143
157
|
log_colors=log_colors) # 加粗对齐
|
144
158
|
# 设置控制台处理器的格式化器为带颜色的格式化器
|
145
159
|
console_handler.setFormatter(color_formatter)
|
146
160
|
except ImportError:
|
147
161
|
pass
|
148
162
|
|
163
|
+
def _get_log_file_path(self):
|
164
|
+
"""获取日志文件的路径,如果日期已经改变就创建一个新的日志文件"""
|
165
|
+
if not self.save_time_log_path: return
|
166
|
+
date = get_time_timestamp_to_datestr(format="%Y_%m_%d")
|
167
|
+
if date != self.current_date:
|
168
|
+
# 日期已经改变,更新当前的日期
|
169
|
+
self.current_date = date
|
170
|
+
# 更新文件处理器的文件路径
|
171
|
+
path = self.path_template.format(date=date)
|
172
|
+
mkdirs_dir(path)
|
173
|
+
for handler in self.logger.handlers:
|
174
|
+
if isinstance(handler, RotatingFileHandler):
|
175
|
+
handler.baseFilename = path
|
176
|
+
handler.doRollover()
|
177
|
+
break
|
178
|
+
|
149
179
|
def debug(self, message):
|
150
180
|
# 记录DEBUG级别的日志
|
181
|
+
self._get_log_file_path()
|
151
182
|
self.logger.debug(message, extra=self._get_caller_name_extra())
|
152
183
|
|
153
184
|
def info(self, message):
|
154
185
|
# 记录INFO级别的日志
|
186
|
+
self._get_log_file_path()
|
155
187
|
self.logger.info(message, extra=self._get_caller_name_extra())
|
156
188
|
|
157
189
|
def warning(self, message):
|
158
190
|
# 记录WARNING级别的日志
|
191
|
+
self._get_log_file_path()
|
159
192
|
self.logger.warning(message, extra=self._get_caller_name_extra())
|
160
193
|
|
161
194
|
def error(self, message):
|
162
195
|
# 记录ERROR级别的日志
|
196
|
+
self._get_log_file_path()
|
163
197
|
self.logger.error(message, extra=self._get_caller_name_extra())
|
164
198
|
|
165
199
|
def critical(self, message):
|
166
200
|
# 记录CRITICAL级别的日志
|
201
|
+
self._get_log_file_path()
|
167
202
|
self.logger.critical(message, extra=self._get_caller_name_extra())
|
168
203
|
|
169
204
|
def _get_caller_name_extra(self):
|
@@ -185,8 +220,11 @@ class Log:
|
|
185
220
|
if __name__ == '__main__':
|
186
221
|
pass
|
187
222
|
logger = Log('mylogger', './xxx.log', log_level='DEBUG', is_write_to_console=True, is_write_to_file=True,
|
188
|
-
color=True, mode='a',
|
189
|
-
|
190
|
-
|
191
|
-
logger.
|
192
|
-
logger.
|
223
|
+
color=True, mode='a', save_time_log_path='./logs')
|
224
|
+
# import time
|
225
|
+
# while True:
|
226
|
+
# logger.debug("debug message")
|
227
|
+
# logger.info("info level message")
|
228
|
+
# logger.warning("warning level message")
|
229
|
+
# logger.critical("critical level message 你好")
|
230
|
+
# time.sleep(1)
|
@@ -1,9 +1,9 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: xtn-tools-pro
|
3
|
-
Version: 1.0.0.1
|
3
|
+
Version: 1.0.0.2.1
|
4
4
|
Summary: xtn 开发工具
|
5
5
|
Author: xtn
|
6
|
-
Author-email: czw011122@
|
6
|
+
Author-email: czw011122@gmail.com
|
7
7
|
Classifier: Programming Language :: Python :: 3
|
8
8
|
Requires-Python: >=3
|
9
9
|
Description-Content-Type: text/markdown
|
@@ -2,23 +2,23 @@ xtn_tools_pro/__init__.py,sha256=26Tf9j2wj88M1Ldg3b1DJ40KyGgN9ZmQdBLuV453388,395
|
|
2
2
|
xtn_tools_pro/tools.py,sha256=KmOOrSnjZNJ3u9vFkMO3FX0DxtlW3fnI5fL4e_raCRs,542
|
3
3
|
xtn_tools_pro/tools_flie.py,sha256=-FID31G8AnV2u2djRO3Ae3Ei9ld9bSBWgzwqhYzZ5JQ,1517
|
4
4
|
xtn_tools_pro/tools_time.py,sha256=DMjsw9h4E_mrPsanPA8CEhpUE1AA6Z2FU4OJqJKZc1k,4867
|
5
|
-
xtn_tools_pro/db/MongoDB.py,sha256=
|
5
|
+
xtn_tools_pro/db/MongoDB.py,sha256=k97e6qs1dwtE9JHFgfMSN6-yNJDy-aZT3efzDa63Ido,5699
|
6
6
|
xtn_tools_pro/db/MysqlDB.py,sha256=SBJrcjbZdxmtTKPGwl57NthPhs4uX8J3P6o_rK01O4k,13373
|
7
|
-
xtn_tools_pro/db/RedisDB.py,sha256
|
7
|
+
xtn_tools_pro/db/RedisDB.py,sha256=YSWxYEPE2jp6r1ZKam2LyPgL0S2S9lGDmt36PLSwThg,6470
|
8
8
|
xtn_tools_pro/db/__init__.py,sha256=Zg91UWS02TO0Ba_0AY56s0oabRy93xLNFkpIIL_6mMM,416
|
9
9
|
xtn_tools_pro/proxy/XiaoXiangProxy.py,sha256=45SsMZDc-3Ta4THX38vScjaeRBJSp420AJwBeogC_-I,11049
|
10
10
|
xtn_tools_pro/proxy/__init__.py,sha256=WRwh6s2lruMu5buh0ejo9EK54kWT_VQhCsFGNFAmcyo,418
|
11
11
|
xtn_tools_pro/proxy/proxy.py,sha256=No6E1pFY5yx2F4976pXPrLtq-QEVp79KupzcufjSN58,8703
|
12
12
|
xtn_tools_pro/utils/__init__.py,sha256=I1_n_NP23F2lBqlF4EOlnOdLYxM8M4pbn63UhJN1hRE,418
|
13
13
|
xtn_tools_pro/utils/crypto.py,sha256=RZ5AET4udlraACWMeNF-17JiZ2R6Ahb47_j4tjkV7LE,3190
|
14
|
-
xtn_tools_pro/utils/file_utils.py,sha256=
|
14
|
+
xtn_tools_pro/utils/file_utils.py,sha256=EoWz0ULgS1uY86KpsP2Ofxj4BGP2gdHnUrdGAGRmpl0,1813
|
15
15
|
xtn_tools_pro/utils/helpers.py,sha256=eHhvhcw_jcUhCA6HwOqpD4XU_V_ZoHDgj3qtLR8yzx8,3812
|
16
|
-
xtn_tools_pro/utils/log.py,sha256=
|
16
|
+
xtn_tools_pro/utils/log.py,sha256=XZChGrKWgAz42o_gFi_d7DL28svF1OvAw7NS_xkIgnQ,10056
|
17
17
|
xtn_tools_pro/utils/retry.py,sha256=0wjHsR5DBBKpv4naMfxiky8kprrZes4WURIfFQ4H708,1657
|
18
18
|
xtn_tools_pro/utils/sql.py,sha256=EAKzbkZP7Q09j15Gm6o0_uq0qgQmcCQT6EAawbpp4v0,6263
|
19
19
|
xtn_tools_pro/utils/time_utils.py,sha256=TUtzG61PeVYXhaQd6pBrXAdlz7tBispNIRQRcGhE2No,4859
|
20
|
-
xtn_tools_pro-1.0.0.1.
|
21
|
-
xtn_tools_pro-1.0.0.1.
|
22
|
-
xtn_tools_pro-1.0.0.1.
|
23
|
-
xtn_tools_pro-1.0.0.1.
|
24
|
-
xtn_tools_pro-1.0.0.1.
|
20
|
+
xtn_tools_pro-1.0.0.2.1.dist-info/LICENSE,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
21
|
+
xtn_tools_pro-1.0.0.2.1.dist-info/METADATA,sha256=uFB-deykhC7Rq1llJzzbHmWUiuwCIjwX4khHrrhqk_Y,455
|
22
|
+
xtn_tools_pro-1.0.0.2.1.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
23
|
+
xtn_tools_pro-1.0.0.2.1.dist-info/top_level.txt,sha256=jyB3FLDEr8zE1U7wHczTgIbvUpALhR-ULF7RVEO7O2U,14
|
24
|
+
xtn_tools_pro-1.0.0.2.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|