re-common 0.2.54__py3-none-any.whl → 2.0.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- re_common/v2/baselibrary/s3object/baseboto3.py +230 -0
- re_common/v2/baselibrary/tools/dict_tools.py +24 -0
- re_common/v2/baselibrary/tools/search_hash_tools.py +33 -0
- re_common/v2/baselibrary/tools/text_matcher.py +223 -0
- re_common/v2/baselibrary/tools/unionfind_tools.py +60 -0
- re_common/v2/baselibrary/utils/BusinessStringUtil.py +74 -0
- re_common/v2/baselibrary/utils/author_smi.py +308 -0
- re_common/v2/baselibrary/utils/basedict.py +26 -0
- re_common/v2/baselibrary/utils/basehdfs.py +127 -0
- re_common/v2/baselibrary/utils/json_cls.py +11 -0
- re_common/v2/baselibrary/utils/string_bool.py +9 -0
- re_common/v2/baselibrary/utils/string_clear.py +98 -0
- re_common/v2/baselibrary/utils/stringutils.py +95 -0
- {re_common-0.2.54.dist-info → re_common-2.0.1.dist-info}/METADATA +1 -1
- re_common-2.0.1.dist-info/RECORD +25 -0
- re_common/baselibrary/__init__.py +0 -4
- re_common/baselibrary/baseabs/__init__.py +0 -7
- re_common/baselibrary/baseabs/baseabs.py +0 -26
- re_common/baselibrary/database/mbuilder.py +0 -132
- re_common/baselibrary/database/moudle.py +0 -93
- re_common/baselibrary/database/msqlite3.py +0 -194
- re_common/baselibrary/database/mysql.py +0 -169
- re_common/baselibrary/database/sql_factory.py +0 -26
- re_common/baselibrary/mthread/MThreadingRun.py +0 -486
- re_common/baselibrary/mthread/MThreadingRunEvent.py +0 -349
- re_common/baselibrary/mthread/__init__.py +0 -3
- re_common/baselibrary/mthread/mythreading.py +0 -695
- re_common/baselibrary/pakge_other/socks.py +0 -404
- re_common/baselibrary/readconfig/config_factory.py +0 -18
- re_common/baselibrary/readconfig/ini_config.py +0 -317
- re_common/baselibrary/readconfig/toml_config.py +0 -49
- re_common/baselibrary/temporary/envdata.py +0 -36
- re_common/baselibrary/tools/all_requests/aiohttp_request.py +0 -118
- re_common/baselibrary/tools/all_requests/httpx_requet.py +0 -102
- re_common/baselibrary/tools/all_requests/mrequest.py +0 -412
- re_common/baselibrary/tools/all_requests/requests_request.py +0 -81
- re_common/baselibrary/tools/batch_compre/__init__.py +0 -0
- re_common/baselibrary/tools/batch_compre/bijiao_batch.py +0 -31
- re_common/baselibrary/tools/contrast_db3.py +0 -123
- re_common/baselibrary/tools/copy_file.py +0 -39
- re_common/baselibrary/tools/db3_2_sizedb3.py +0 -102
- re_common/baselibrary/tools/foreachgz.py +0 -40
- re_common/baselibrary/tools/get_attr.py +0 -11
- re_common/baselibrary/tools/image_to_pdf.py +0 -62
- re_common/baselibrary/tools/java_code_deal.py +0 -139
- re_common/baselibrary/tools/javacode.py +0 -79
- re_common/baselibrary/tools/mdb_db3.py +0 -48
- re_common/baselibrary/tools/merge_file.py +0 -171
- re_common/baselibrary/tools/merge_gz_file.py +0 -165
- re_common/baselibrary/tools/mhdfstools/__init__.py +0 -0
- re_common/baselibrary/tools/mhdfstools/down_hdfs_files.py +0 -42
- re_common/baselibrary/tools/mhdfstools/hdfst.py +0 -42
- re_common/baselibrary/tools/mhdfstools/up_hdfs_files.py +0 -38
- re_common/baselibrary/tools/mongo_tools.py +0 -50
- re_common/baselibrary/tools/move_file.py +0 -170
- re_common/baselibrary/tools/move_mongo/__init__.py +0 -0
- re_common/baselibrary/tools/move_mongo/mongo_table_to_file.py +0 -63
- re_common/baselibrary/tools/move_mongo/move_mongo_table.py +0 -354
- re_common/baselibrary/tools/move_mongo/use_mttf.py +0 -18
- re_common/baselibrary/tools/move_mongo/use_mv.py +0 -93
- re_common/baselibrary/tools/mpandas/__init__.py +0 -0
- re_common/baselibrary/tools/mpandas/mpandasreadexcel.py +0 -125
- re_common/baselibrary/tools/mpandas/pandas_visualization.py +0 -8
- re_common/baselibrary/tools/myparsel.py +0 -104
- re_common/baselibrary/tools/rename_dir_file.py +0 -37
- re_common/baselibrary/tools/sequoiadb_utils.py +0 -398
- re_common/baselibrary/tools/split_line_to_many.py +0 -25
- re_common/baselibrary/tools/stringtodicts.py +0 -33
- re_common/baselibrary/tools/workwechant_bot.py +0 -84
- re_common/baselibrary/utils/__init__.py +0 -0
- re_common/baselibrary/utils/baseaiohttp.py +0 -296
- re_common/baselibrary/utils/baseaiomysql.py +0 -87
- re_common/baselibrary/utils/baseallstep.py +0 -191
- re_common/baselibrary/utils/baseavro.py +0 -19
- re_common/baselibrary/utils/baseboto3.py +0 -291
- re_common/baselibrary/utils/basecsv.py +0 -32
- re_common/baselibrary/utils/basedict.py +0 -133
- re_common/baselibrary/utils/basedir.py +0 -241
- re_common/baselibrary/utils/baseencode.py +0 -351
- re_common/baselibrary/utils/baseencoding.py +0 -29
- re_common/baselibrary/utils/baseesdsl.py +0 -86
- re_common/baselibrary/utils/baseexcel.py +0 -264
- re_common/baselibrary/utils/baseexcept.py +0 -109
- re_common/baselibrary/utils/basefile.py +0 -654
- re_common/baselibrary/utils/baseftp.py +0 -214
- re_common/baselibrary/utils/basegzip.py +0 -60
- re_common/baselibrary/utils/basehdfs.py +0 -135
- re_common/baselibrary/utils/basehttpx.py +0 -268
- re_common/baselibrary/utils/baseip.py +0 -87
- re_common/baselibrary/utils/basejson.py +0 -2
- re_common/baselibrary/utils/baselist.py +0 -32
- re_common/baselibrary/utils/basemotor.py +0 -190
- re_common/baselibrary/utils/basemssql.py +0 -98
- re_common/baselibrary/utils/baseodbc.py +0 -113
- re_common/baselibrary/utils/basepandas.py +0 -302
- re_common/baselibrary/utils/basepeewee.py +0 -11
- re_common/baselibrary/utils/basepika.py +0 -180
- re_common/baselibrary/utils/basepydash.py +0 -143
- re_common/baselibrary/utils/basepymongo.py +0 -230
- re_common/baselibrary/utils/basequeue.py +0 -22
- re_common/baselibrary/utils/baserar.py +0 -57
- re_common/baselibrary/utils/baserequest.py +0 -279
- re_common/baselibrary/utils/baseset.py +0 -8
- re_common/baselibrary/utils/basesmb.py +0 -403
- re_common/baselibrary/utils/basestring.py +0 -382
- re_common/baselibrary/utils/basetime.py +0 -320
- re_common/baselibrary/utils/basetuple.py +0 -0
- re_common/baselibrary/utils/baseurl.py +0 -121
- re_common/baselibrary/utils/basezip.py +0 -57
- re_common/baselibrary/utils/core/__init__.py +0 -8
- re_common/baselibrary/utils/core/bottomutils.py +0 -18
- re_common/baselibrary/utils/core/mdeprecated.py +0 -327
- re_common/baselibrary/utils/core/mlamada.py +0 -16
- re_common/baselibrary/utils/core/msginfo.py +0 -25
- re_common/baselibrary/utils/core/requests_core.py +0 -103
- re_common/baselibrary/utils/fateadm.py +0 -429
- re_common/baselibrary/utils/importfun.py +0 -123
- re_common/baselibrary/utils/mfaker.py +0 -57
- re_common/baselibrary/utils/my_abc/__init__.py +0 -3
- re_common/baselibrary/utils/my_abc/better_abc.py +0 -32
- re_common/baselibrary/utils/mylogger.py +0 -414
- re_common/baselibrary/utils/myredisclient.py +0 -861
- re_common/baselibrary/utils/pipupgrade.py +0 -21
- re_common/baselibrary/utils/ringlist.py +0 -85
- re_common/baselibrary/utils/version_compare.py +0 -36
- re_common/baselibrary/utils/ydmhttp.py +0 -126
- re_common/facade/__init__.py +0 -1
- re_common/facade/lazy_import.py +0 -11
- re_common/facade/loggerfacade.py +0 -25
- re_common/facade/mysqlfacade.py +0 -467
- re_common/facade/now.py +0 -31
- re_common/facade/sqlite3facade.py +0 -257
- re_common/facade/use/__init__.py +0 -0
- re_common/facade/use/mq_use_facade.py +0 -83
- re_common/facade/use/proxy_use_facade.py +0 -20
- re_common/libtest/__init__.py +0 -0
- re_common/libtest/base_dict_test.py +0 -19
- re_common/libtest/baseavro_test.py +0 -13
- re_common/libtest/basefile_test.py +0 -14
- re_common/libtest/basemssql_test.py +0 -77
- re_common/libtest/baseodbc_test.py +0 -8
- re_common/libtest/basepandas_test.py +0 -38
- re_common/libtest/get_attr_test/__init__.py +0 -0
- re_common/libtest/get_attr_test/get_attr_test_settings.py +0 -14
- re_common/libtest/get_attr_test/settings.py +0 -55
- re_common/libtest/idencode_test.py +0 -54
- re_common/libtest/iniconfig_test.py +0 -35
- re_common/libtest/ip_test.py +0 -35
- re_common/libtest/merge_file_test.py +0 -20
- re_common/libtest/mfaker_test.py +0 -9
- re_common/libtest/mm3_test.py +0 -32
- re_common/libtest/mylogger_test.py +0 -89
- re_common/libtest/myparsel_test.py +0 -28
- re_common/libtest/mysql_test.py +0 -151
- re_common/libtest/pymongo_test.py +0 -21
- re_common/libtest/split_test.py +0 -12
- re_common/libtest/sqlite3_merge_test.py +0 -6
- re_common/libtest/sqlite3_test.py +0 -34
- re_common/libtest/tomlconfig_test.py +0 -30
- re_common/libtest/use_tools_test/__init__.py +0 -3
- re_common/libtest/user/__init__.py +0 -5
- re_common/studio/__init__.py +0 -5
- re_common/studio/assignment_expressions.py +0 -37
- re_common/studio/mydash/__init__.py +0 -0
- re_common/studio/mydash/test1.py +0 -19
- re_common/studio/pydashstudio/__init__.py +0 -0
- re_common/studio/pydashstudio/first.py +0 -9
- re_common/studio/streamlitstudio/__init__.py +0 -0
- re_common/studio/streamlitstudio/first_app.py +0 -66
- re_common/studio/streamlitstudio/uber_pickups.py +0 -24
- re_common/studio/test.py +0 -19
- re_common/vip/__init__.py +0 -0
- re_common/vip/base_step_process.py +0 -11
- re_common/vip/baseencodeid.py +0 -91
- re_common/vip/changetaskname.py +0 -28
- re_common/vip/core_var.py +0 -24
- re_common/vip/mmh3Hash.py +0 -90
- re_common/vip/proxy/__init__.py +0 -0
- re_common/vip/proxy/allproxys.py +0 -127
- re_common/vip/proxy/allproxys_thread.py +0 -159
- re_common/vip/proxy/cnki_proxy.py +0 -153
- re_common/vip/proxy/kuaidaili.py +0 -87
- re_common/vip/proxy/proxy_all.py +0 -113
- re_common/vip/proxy/update_kuaidaili_0.py +0 -42
- re_common/vip/proxy/wanfang_proxy.py +0 -152
- re_common/vip/proxy/wp_proxy_all.py +0 -182
- re_common/vip/read_rawid_to_txt.py +0 -92
- re_common/vip/title/__init__.py +0 -5
- re_common/vip/title/transform/TransformBookTitleToZt.py +0 -125
- re_common/vip/title/transform/TransformConferenceTitleToZt.py +0 -139
- re_common/vip/title/transform/TransformCstadTitleToZt.py +0 -196
- re_common/vip/title/transform/TransformJournalTitleToZt.py +0 -203
- re_common/vip/title/transform/TransformPatentTitleToZt.py +0 -132
- re_common/vip/title/transform/TransformRegulationTitleToZt.py +0 -114
- re_common/vip/title/transform/TransformStandardTitleToZt.py +0 -135
- re_common/vip/title/transform/TransformThesisTitleToZt.py +0 -135
- re_common/vip/title/transform/__init__.py +0 -11
- re_common-0.2.54.dist-info/RECORD +0 -194
- /re_common/{baselibrary/database → v2}/__init__.py +0 -0
- /re_common/{baselibrary/pakge_other → v2/baselibrary}/__init__.py +0 -0
- /re_common/{baselibrary/readconfig → v2/baselibrary/s3object}/__init__.py +0 -0
- /re_common/{baselibrary/temporary → v2/baselibrary/tools}/__init__.py +0 -0
- /re_common/{baselibrary/tools/__init__.py → v2/baselibrary/tools/list_tools.py} +0 -0
- /re_common/{baselibrary/tools/all_requests → v2/baselibrary/utils}/__init__.py +0 -0
- {re_common-0.2.54.dist-info → re_common-2.0.1.dist-info}/LICENSE +0 -0
- {re_common-0.2.54.dist-info → re_common-2.0.1.dist-info}/WHEEL +0 -0
- {re_common-0.2.54.dist-info → re_common-2.0.1.dist-info}/top_level.txt +0 -0
|
@@ -1,414 +0,0 @@
|
|
|
1
|
-
#!/usr/local/bin/python
|
|
2
|
-
# -*- coding:utf-8 -*-
|
|
3
|
-
|
|
4
|
-
# 由于每个配置必须要有root 所以这里有个root,但我们不使用他,因为在logger对象中无法获取root的hander
|
|
5
|
-
# 来设置过滤器,这里我们使用all代表文件和控制台的输出,配置文件的使用模式是在[loggers]中申明有哪些logger
|
|
6
|
-
# 在 [logger_xxx]中对应每个logger的配置,下面的结构完全遵循这一结构
|
|
7
|
-
|
|
8
|
-
import logging
|
|
9
|
-
import logging.config
|
|
10
|
-
import os
|
|
11
|
-
import sys
|
|
12
|
-
import time
|
|
13
|
-
from functools import wraps
|
|
14
|
-
from logging.handlers import TimedRotatingFileHandler, RotatingFileHandler
|
|
15
|
-
from os import path
|
|
16
|
-
|
|
17
|
-
"""
|
|
18
|
-
这个是logger的过滤器 可以过滤掉多余的日志 让对应级别的日志写入对应级别的文件
|
|
19
|
-
通过日志的级别和传入的级别对比 返回true or false
|
|
20
|
-
"""
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
class BaseLogFilter(logging.Filter):
|
|
24
|
-
def __init__(self, name='', logname="_1"):
|
|
25
|
-
super(BaseLogFilter, self).__init__(name)
|
|
26
|
-
self.logname = logname
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
class LogLevelFilter(BaseLogFilter):
|
|
30
|
-
def __init__(self, name='', level=logging.DEBUG, levels=None):
|
|
31
|
-
super(LogLevelFilter, self).__init__(name)
|
|
32
|
-
self.level = level
|
|
33
|
-
self.levels = levels
|
|
34
|
-
|
|
35
|
-
def filter(self, record):
|
|
36
|
-
if self.levels == None:
|
|
37
|
-
return record.levelno == self.level
|
|
38
|
-
else:
|
|
39
|
-
for level in self.levels:
|
|
40
|
-
if record.levelno == level:
|
|
41
|
-
return True
|
|
42
|
-
return False
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
"""
|
|
46
|
-
单例模式的一种实现
|
|
47
|
-
"""
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
def singleton(cls):
|
|
51
|
-
instances = {}
|
|
52
|
-
|
|
53
|
-
@wraps(cls)
|
|
54
|
-
def getinstance(*args, **kw):
|
|
55
|
-
if cls not in instances:
|
|
56
|
-
instances[cls] = cls(*args, **kw)
|
|
57
|
-
return instances[cls]
|
|
58
|
-
|
|
59
|
-
return getinstance
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
"""
|
|
63
|
-
Logger的主体,主要靠这个实现
|
|
64
|
-
加入单例模式下遇到MLogger调用静态方法会出问题
|
|
65
|
-
"""
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
# @singleton
|
|
69
|
-
class MLogger(object):
|
|
70
|
-
def __init__(self, logfiledir=None, filter=None):
|
|
71
|
-
if logfiledir:
|
|
72
|
-
# 获取logger实例,如果参数为空则返回root logger
|
|
73
|
-
self.confFilePath(logfiledir)
|
|
74
|
-
# 这是输出流
|
|
75
|
-
self.streamoutlogger = self.streamOutLogger()
|
|
76
|
-
# 这是错误流
|
|
77
|
-
self.streamerrlogger = self.streamErrLogger()
|
|
78
|
-
|
|
79
|
-
self.streamlogger = self.streamLogger()
|
|
80
|
-
|
|
81
|
-
self._alllogger = None
|
|
82
|
-
self._filelogger = None
|
|
83
|
-
self._timerotatingfilelogger = None
|
|
84
|
-
self._rotatingfilelogger = None
|
|
85
|
-
self.fileter = filter
|
|
86
|
-
|
|
87
|
-
self.maxBytes = 1024 * 1024 * 1024
|
|
88
|
-
self.backupCount = 10
|
|
89
|
-
|
|
90
|
-
def set_logfiledir(self, logfiledir):
|
|
91
|
-
self.confFilePath(logfiledir)
|
|
92
|
-
|
|
93
|
-
@property
|
|
94
|
-
def alllogger(self):
|
|
95
|
-
# logger 对象是alllogger 及所有日志对象
|
|
96
|
-
if not self._alllogger:
|
|
97
|
-
self._alllogger = self.allLogger(self.logfiledir)
|
|
98
|
-
return self._alllogger
|
|
99
|
-
|
|
100
|
-
@alllogger.setter
|
|
101
|
-
def alllogger(self, value):
|
|
102
|
-
self._alllogger = value
|
|
103
|
-
|
|
104
|
-
@property
|
|
105
|
-
def filelogger(self):
|
|
106
|
-
if not self._filelogger:
|
|
107
|
-
self._filelogger = self.fileLogger(self.logfiledir)
|
|
108
|
-
return self._filelogger
|
|
109
|
-
|
|
110
|
-
@filelogger.setter
|
|
111
|
-
def filelogger(self, value):
|
|
112
|
-
self._filelogger = value
|
|
113
|
-
|
|
114
|
-
@property
|
|
115
|
-
def timerotatingfilelogger(self):
|
|
116
|
-
if not self._timerotatingfilelogger:
|
|
117
|
-
self._timerotatingfilelogger = self.timeRotatingFileLogger(self.logfiledir, self.fileter)
|
|
118
|
-
return self._timerotatingfilelogger
|
|
119
|
-
|
|
120
|
-
@timerotatingfilelogger.setter
|
|
121
|
-
def timerotatingfilelogger(self, value):
|
|
122
|
-
self._timerotatingfilelogger = value
|
|
123
|
-
|
|
124
|
-
@property
|
|
125
|
-
def rotatingfilelogger(self):
|
|
126
|
-
if not self._rotatingfilelogger:
|
|
127
|
-
self._rotatingfilelogger = self.RotatingFileLogger(self.logfiledir, self.fileter, maxBytes=self.maxBytes,
|
|
128
|
-
backupCount=self.backupCount)
|
|
129
|
-
return self._rotatingfilelogger
|
|
130
|
-
|
|
131
|
-
@rotatingfilelogger.setter
|
|
132
|
-
def rotatingfilelogger(self, value):
|
|
133
|
-
self._rotatingfilelogger = value
|
|
134
|
-
|
|
135
|
-
def confFilePath(self, path=None):
|
|
136
|
-
"""
|
|
137
|
-
这里定义了log日志存放的目录
|
|
138
|
-
:param path: log日志存放的路径 如果没有 就默认当前目录的logs文件夹
|
|
139
|
-
:return:
|
|
140
|
-
"""
|
|
141
|
-
if path is None or path == '':
|
|
142
|
-
# 如果没有指定文件路径
|
|
143
|
-
self.logfiledir = "./logs"
|
|
144
|
-
if not os.path.exists(self.logfiledir):
|
|
145
|
-
os.makedirs(self.logfiledir)
|
|
146
|
-
else:
|
|
147
|
-
try:
|
|
148
|
-
if not os.path.exists(path):
|
|
149
|
-
os.makedirs(path)
|
|
150
|
-
self.logfiledir = path
|
|
151
|
-
except Exception as e:
|
|
152
|
-
raise e
|
|
153
|
-
|
|
154
|
-
@staticmethod
|
|
155
|
-
def formatter():
|
|
156
|
-
# fmt = "%(asctime)s %(levelname)s {%(message)s} %(pathname)s:%(funcName)s:%(lineno)s:%(module)s %(name)s %(processName)s:%(process)d %(threadName)s:%(thread)d"
|
|
157
|
-
fmt = "[%(asctime)s %(levelname)s/%(processName)s:%(process)d/%(threadName)s:%(thread)d] %(message)s ==> %(pathname)s->%(module)s->%(funcName)s->%(lineno)s %(name)s"
|
|
158
|
-
datefmt = "%a %d %b %Y %H:%M:%S" # Thu 22 Feb 2018
|
|
159
|
-
datefmt = "%Y-%m-%d %H:%M:%S" # 2018-02-22
|
|
160
|
-
formatter = logging.Formatter(fmt, datefmt)
|
|
161
|
-
return formatter
|
|
162
|
-
|
|
163
|
-
@staticmethod
|
|
164
|
-
def BaseHandler(std, level, filter=None):
|
|
165
|
-
# 错误流的handler warn及其以上
|
|
166
|
-
streamerrhandler = logging.StreamHandler(std)
|
|
167
|
-
if filter != None:
|
|
168
|
-
# 添加过滤器
|
|
169
|
-
streamerrhandler.addFilter(filter)
|
|
170
|
-
# 获取输出格式
|
|
171
|
-
streamerrhandler.setFormatter(MLogger.formatter())
|
|
172
|
-
# 设置级别
|
|
173
|
-
streamerrhandler.setLevel(level)
|
|
174
|
-
return streamerrhandler
|
|
175
|
-
|
|
176
|
-
@staticmethod
|
|
177
|
-
def BaseFileHandler(level, filename, filter=None, encoding='utf-8'):
|
|
178
|
-
fileHandler = logging.FileHandler(filename, encoding=encoding)
|
|
179
|
-
if filter != None:
|
|
180
|
-
fileHandler.addFilter(filter)
|
|
181
|
-
fileHandler.setFormatter(MLogger.formatter())
|
|
182
|
-
fileHandler.setLevel(level)
|
|
183
|
-
return fileHandler
|
|
184
|
-
|
|
185
|
-
# 错误流会输出WARN及以上的级别
|
|
186
|
-
@staticmethod
|
|
187
|
-
def streamErrHandlers():
|
|
188
|
-
return MLogger.BaseHandler(sys.stderr, logging.WARN)
|
|
189
|
-
|
|
190
|
-
@staticmethod
|
|
191
|
-
def streamHandlers():
|
|
192
|
-
return MLogger.BaseHandler(sys.stdout, logging.DEBUG)
|
|
193
|
-
|
|
194
|
-
# 输出流只会输出INFO 和 DEBUG 两个级别的数据
|
|
195
|
-
# https://yinzo.github.io/14610807170718.html 小坑
|
|
196
|
-
@staticmethod
|
|
197
|
-
def streamOutHandler():
|
|
198
|
-
filter_stdout = LogLevelFilter(levels=[logging.INFO, logging.DEBUG])
|
|
199
|
-
return MLogger.BaseHandler(sys.stdout, logging.DEBUG, filter_stdout)
|
|
200
|
-
|
|
201
|
-
# 文件流会将所有级别的日志写入mylog.log这个文件
|
|
202
|
-
@staticmethod
|
|
203
|
-
def fileHandler(filepath):
|
|
204
|
-
log_file_path = path.join(filepath, time.strftime('%Y%m%d', time.localtime(time.time())) + ".log")
|
|
205
|
-
return MLogger.BaseFileHandler(logging.DEBUG, log_file_path)
|
|
206
|
-
|
|
207
|
-
@staticmethod
|
|
208
|
-
def timeRotatingFileHandler(filepath, filter=None):
|
|
209
|
-
suffix = ""
|
|
210
|
-
if filter != None:
|
|
211
|
-
suffix = filter.logname
|
|
212
|
-
log_file_path = path.join(filepath, time.strftime('%Y%m%d', time.localtime(time.time())) + suffix + ".log")
|
|
213
|
-
hander = TimedRotatingFileHandler(log_file_path, when="D", interval=1, backupCount=30)
|
|
214
|
-
if filter != None:
|
|
215
|
-
# 添加过滤器
|
|
216
|
-
hander.addFilter(filter)
|
|
217
|
-
hander.setFormatter(MLogger.formatter())
|
|
218
|
-
hander.setLevel(logging.DEBUG)
|
|
219
|
-
return hander
|
|
220
|
-
|
|
221
|
-
@staticmethod
|
|
222
|
-
def RotatingFileHandler(filepath, filter=None, maxBytes=1024 * 1024 * 1024, backupCount=10):
|
|
223
|
-
suffix = ""
|
|
224
|
-
if filter != None:
|
|
225
|
-
suffix = filter.logname
|
|
226
|
-
log_file_path = path.join(filepath, time.strftime('%Y%m%d', time.localtime(time.time())) + suffix + ".log")
|
|
227
|
-
hander = RotatingFileHandler(log_file_path, maxBytes=maxBytes, backupCount=backupCount)
|
|
228
|
-
if filter != None:
|
|
229
|
-
# 添加过滤器
|
|
230
|
-
hander.addFilter(filter)
|
|
231
|
-
hander.setFormatter(MLogger.formatter())
|
|
232
|
-
hander.setLevel(logging.DEBUG)
|
|
233
|
-
return hander
|
|
234
|
-
|
|
235
|
-
"""
|
|
236
|
-
下面这些只会将对应级别的日志写入对应的文件
|
|
237
|
-
"""
|
|
238
|
-
|
|
239
|
-
@staticmethod
|
|
240
|
-
def fileDebugHandler(filepath):
|
|
241
|
-
log_file_path = path.join(filepath,
|
|
242
|
-
"mydebuglog_" + time.strftime('%Y%m%d', time.localtime(time.time())) + ".log")
|
|
243
|
-
filter_debug = LogLevelFilter(level=logging.DEBUG)
|
|
244
|
-
return MLogger.BaseFileHandler(logging.DEBUG, log_file_path, filter_debug)
|
|
245
|
-
|
|
246
|
-
@staticmethod
|
|
247
|
-
def fileInfoHandler(filepath):
|
|
248
|
-
log_file_path = path.join(filepath,
|
|
249
|
-
"myinfolog_" + time.strftime('%Y%m%d', time.localtime(time.time())) + ".log")
|
|
250
|
-
filter_info = LogLevelFilter(level=logging.INFO)
|
|
251
|
-
|
|
252
|
-
return MLogger.BaseFileHandler(logging.DEBUG, log_file_path, filter_info)
|
|
253
|
-
|
|
254
|
-
@staticmethod
|
|
255
|
-
def fileWarnHandler(filepath):
|
|
256
|
-
log_file_path = path.join(filepath,
|
|
257
|
-
"mywarnlog_" + time.strftime('%Y%m%d', time.localtime(time.time())) + ".log")
|
|
258
|
-
filter_warn = LogLevelFilter(level=logging.WARN)
|
|
259
|
-
|
|
260
|
-
return MLogger.BaseFileHandler(logging.DEBUG, log_file_path, filter_warn)
|
|
261
|
-
|
|
262
|
-
@staticmethod
|
|
263
|
-
def fileErrorHandler(filepath):
|
|
264
|
-
log_file_path = path.join(filepath,
|
|
265
|
-
"myerrorlog_" + time.strftime('%Y%m%d', time.localtime(time.time())) + ".log")
|
|
266
|
-
filter_error = LogLevelFilter(level=logging.ERROR)
|
|
267
|
-
|
|
268
|
-
return MLogger.BaseFileHandler(logging.DEBUG, log_file_path, filter_error)
|
|
269
|
-
|
|
270
|
-
@staticmethod
|
|
271
|
-
def fileExceptionHandler(filepath):
|
|
272
|
-
log_file_path = path.join(filepath,
|
|
273
|
-
"myexceptionlog_" + time.strftime('%Y%m%d', time.localtime(time.time())) + ".log")
|
|
274
|
-
filter_exception = LogLevelFilter(level=logging.ERROR) # 会返回错误堆栈
|
|
275
|
-
|
|
276
|
-
return MLogger.BaseFileHandler(logging.DEBUG, log_file_path, filter_exception)
|
|
277
|
-
|
|
278
|
-
@staticmethod
|
|
279
|
-
def fileCriticalHandler(filepath):
|
|
280
|
-
log_file_path = path.join(filepath,
|
|
281
|
-
"mycriticallog_" + time.strftime('%Y%m%d', time.localtime(time.time())) + ".log")
|
|
282
|
-
filter_critical = LogLevelFilter(level=logging.CRITICAL)
|
|
283
|
-
return MLogger.BaseFileHandler(logging.DEBUG, log_file_path, filter_critical)
|
|
284
|
-
|
|
285
|
-
"""
|
|
286
|
-
下面是各种各样的logger 用于不同的输出
|
|
287
|
-
比如你用errlogger就会只打印错误的logger 而不会打印输出信息的logger且不会写入文件
|
|
288
|
-
我们可以自由组合我们的logger方便使用,只要定义出不同组合的logger就行了,我现在一般使用allloger
|
|
289
|
-
记录下所有的信息
|
|
290
|
-
"""
|
|
291
|
-
|
|
292
|
-
@staticmethod
|
|
293
|
-
def streamErrLogger(level=logging.DEBUG):
|
|
294
|
-
# 获取logger对象
|
|
295
|
-
logger = logging.getLogger("streamErrLogger")
|
|
296
|
-
# 设置logger获取的级别
|
|
297
|
-
logger.setLevel(level)
|
|
298
|
-
logger.handlers = []
|
|
299
|
-
# 为logger添加handler
|
|
300
|
-
logger.addHandler(MLogger.streamErrHandlers())
|
|
301
|
-
return logger
|
|
302
|
-
|
|
303
|
-
@staticmethod
|
|
304
|
-
def streamOutLogger(level=logging.DEBUG):
|
|
305
|
-
logger = logging.getLogger("streamOutLogger")
|
|
306
|
-
logger.setLevel(level)
|
|
307
|
-
logger.handlers = []
|
|
308
|
-
logger.addHandler(MLogger.streamOutHandler())
|
|
309
|
-
return logger
|
|
310
|
-
|
|
311
|
-
@staticmethod
|
|
312
|
-
def allLogger(filepath,level=logging.DEBUG):
|
|
313
|
-
# 获取all代表不管输出和文件都会有流产生
|
|
314
|
-
logger = logging.getLogger("all")
|
|
315
|
-
logger.setLevel(level)
|
|
316
|
-
logger.handlers = []
|
|
317
|
-
# http://www.aiuxian.com/article/p-483639.html
|
|
318
|
-
logger.addHandler(MLogger.streamOutHandler()) # 输出流
|
|
319
|
-
logger.addHandler(MLogger.streamErrHandlers()) # 错误流
|
|
320
|
-
# 这是所有的日志都会输出到这个文件
|
|
321
|
-
logger.addHandler(MLogger.fileHandler(filepath))
|
|
322
|
-
# 下面是各个级别的日志流都会输入到对应的文件中
|
|
323
|
-
logger.addHandler(MLogger.fileDebugHandler(filepath))
|
|
324
|
-
logger.addHandler(MLogger.fileInfoHandler(filepath))
|
|
325
|
-
logger.addHandler(MLogger.fileWarnHandler(filepath))
|
|
326
|
-
logger.addHandler(MLogger.fileErrorHandler(filepath))
|
|
327
|
-
logger.addHandler(MLogger.fileExceptionHandler(filepath))
|
|
328
|
-
logger.addHandler(MLogger.fileCriticalHandler(filepath))
|
|
329
|
-
return logger
|
|
330
|
-
|
|
331
|
-
@staticmethod
|
|
332
|
-
def multifile_logger(filepath,level=logging.DEBUG):
|
|
333
|
-
# 获取all代表不管输出和文件都会有流产生
|
|
334
|
-
logger = logging.getLogger("multifile")
|
|
335
|
-
logger.setLevel(level)
|
|
336
|
-
logger.handlers = []
|
|
337
|
-
# 下面是各个级别的日志流都会输入到对应的文件中
|
|
338
|
-
logger.addHandler(MLogger.fileDebugHandler(filepath))
|
|
339
|
-
logger.addHandler(MLogger.fileInfoHandler(filepath))
|
|
340
|
-
logger.addHandler(MLogger.fileWarnHandler(filepath))
|
|
341
|
-
logger.addHandler(MLogger.fileErrorHandler(filepath))
|
|
342
|
-
logger.addHandler(MLogger.fileExceptionHandler(filepath))
|
|
343
|
-
logger.addHandler(MLogger.fileCriticalHandler(filepath))
|
|
344
|
-
return logger
|
|
345
|
-
|
|
346
|
-
@staticmethod
|
|
347
|
-
def fileLogger(filepath,level=logging.DEBUG):
|
|
348
|
-
# 获取all代表不管输出和文件都会有流产生
|
|
349
|
-
logger = logging.getLogger("file")
|
|
350
|
-
logger.setLevel(level)
|
|
351
|
-
# 防止多次写入
|
|
352
|
-
logger.handlers = []
|
|
353
|
-
# http://www.aiuxian.com/article/p-483639.html
|
|
354
|
-
logger.addHandler(MLogger.streamOutHandler()) # 输出流
|
|
355
|
-
logger.addHandler(MLogger.streamErrHandlers()) # 错误流
|
|
356
|
-
# 这是所有的日志都会输出到这个文件
|
|
357
|
-
logger.addHandler(MLogger.fileHandler(filepath))
|
|
358
|
-
return logger
|
|
359
|
-
|
|
360
|
-
@staticmethod
|
|
361
|
-
def timeRotatingFileLogger(filepath, fileter,level=logging.DEBUG):
|
|
362
|
-
# 获取all代表不管输出和文件都会有流产生
|
|
363
|
-
logger = logging.getLogger("timerotatingfile")
|
|
364
|
-
logger.setLevel(level)
|
|
365
|
-
# 防止多次写入
|
|
366
|
-
logger.handlers = []
|
|
367
|
-
# http://www.aiuxian.com/article/p-483639.html
|
|
368
|
-
logger.addHandler(MLogger.streamOutHandler()) # 输出流
|
|
369
|
-
logger.addHandler(MLogger.streamErrHandlers()) # 错误流
|
|
370
|
-
if fileter:
|
|
371
|
-
logger.addHandler(MLogger.timeRotatingFileHandler(filepath, fileter))
|
|
372
|
-
# 这是所有的日志都会输出到这个文件
|
|
373
|
-
logger.addHandler(MLogger.timeRotatingFileHandler(filepath))
|
|
374
|
-
return logger
|
|
375
|
-
|
|
376
|
-
@staticmethod
|
|
377
|
-
def RotatingFileLogger(filepath, fileter, maxBytes=1024 * 1024 * 1024, backupCount=10,level=logging.DEBUG):
|
|
378
|
-
# 获取all代表不管输出和文件都会有流产生
|
|
379
|
-
logger = logging.getLogger("rotatingfile")
|
|
380
|
-
logger.setLevel(level)
|
|
381
|
-
# 防止多次写入
|
|
382
|
-
logger.handlers = []
|
|
383
|
-
# http://www.aiuxian.com/article/p-483639.html
|
|
384
|
-
logger.addHandler(MLogger.streamOutHandler()) # 输出流
|
|
385
|
-
logger.addHandler(MLogger.streamErrHandlers()) # 错误流
|
|
386
|
-
if fileter:
|
|
387
|
-
logger.addHandler(
|
|
388
|
-
MLogger.RotatingFileHandler(filepath, fileter, maxBytes=maxBytes, backupCount=backupCount))
|
|
389
|
-
# 这是所有的日志都会输出到这个文件
|
|
390
|
-
logger.addHandler(MLogger.RotatingFileHandler(filepath, maxBytes=maxBytes, backupCount=backupCount))
|
|
391
|
-
return logger
|
|
392
|
-
|
|
393
|
-
def streamLogger(self,level=logging.DEBUG):
|
|
394
|
-
# 全局对象个数有getLogger的参数决定
|
|
395
|
-
logger = logging.getLogger("streamLogger")
|
|
396
|
-
logger.setLevel(level)
|
|
397
|
-
# 防止多次打印
|
|
398
|
-
logger.handlers = []
|
|
399
|
-
logger.addHandler(MLogger.streamHandlers())
|
|
400
|
-
return logger
|
|
401
|
-
|
|
402
|
-
# def main():
|
|
403
|
-
#
|
|
404
|
-
# # 使用教程
|
|
405
|
-
# log_file_path = path.join(path.dirname(path.abspath(__file__)), 'logs')
|
|
406
|
-
# logger = MLogger(log_file_path).streamlogger
|
|
407
|
-
# logger.debug('debug message')
|
|
408
|
-
# logger.info('info message')
|
|
409
|
-
# logger.warning('warn message')
|
|
410
|
-
# logger.error('error message')
|
|
411
|
-
# logger.exception('exception message')
|
|
412
|
-
# logger.critical('critical message')
|
|
413
|
-
#
|
|
414
|
-
# main()
|