python import logging问题
作者:IT小海豚
创建日志类并使用
如何使用python自带的 logging 模块实现日志功能
1.初始化一个logger对象
1)引入模块
import os import logging import sys
2)初始化变量,声明logger对象
LOG_PATH = 'logs' #设置log路径 LOG_FILE = 'text.txt' #设置log文件名 #设置根路径为起始位置 logger = logging.getLogger(__name__)
3)生成路径
#生成log指定路径 if os.path.exists(LOG_PATH): pass else: os.mkdir(LOG_PATH)
4)指定logger输出格式
formatter = logging.Formatter('%(asctime)s %(levelname)-8s: %(message)s') file_handler = logging.FileHandler("%s/%s" % (LOG_PATH, LOG_FILE)) # 可以通过setFormatter指定输出格式 file_handler.setFormatter(formatter) logger.addHandler(file_handler)
5)指定日志文件的输出级别
分为如下几个级别:
_nameToLevel = { 'CRITICAL': CRITICAL, 'FATAL': FATAL, 'ERROR': ERROR, 'WARN': WARNING, 'WARNING': WARNING, 'INFO': INFO, 'DEBUG': DEBUG, 'NOTSET': NOTSET, }
使用setLevel函数指定输出级别 指定之后将只显示级别以上的日志类型
logger.setLevel(logging.DEBUG)
2.输入日志内容
#输出debug类型日志 logger.debug("debug") #多参数传递 输入info类型日志 pam= "dshck" pam2="cxjkdhc" logger.info("%s%s"%(pam,pam2))
log.py 代码如下
import os import logging from logging.handlers import TimedRotatingFileHandler import datetime import json LOG_PATH = "log" LOG_INFO = '_info.log' LOG_ERROR = '_error.log' class logger: def __init__(self,prefix_name = "flask"): if os.path.exists(LOG_PATH): pass else: os.mkdir(LOG_PATH) self.prefix = prefix_name self.info_logger = logging.getLogger("info") self.error_logger = logging.getLogger("error") self.format = logging.Formatter('[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s]\ [%(filename)s:%(lineno)d]' '[%(levelname)s] : %(message)s') #指定文件位置文件名以及输出格式 info_file_handler = logging.FileHandler("%s/%s%s" % (LOG_PATH, prefix_name,LOG_INFO)) info_file_handler.setFormatter(self.format) error_file_handler = logging.FileHandler("%s/%s%s" % (LOG_PATH, prefix_name,LOG_ERROR)) error_file_handler.setFormatter(self.format) self.info_logger.addHandler(info_file_handler) self.error_logger.addHandler(error_file_handler) # 指定日志的最低输出级别 self.info_logger.setLevel(logging.NOTSET) self.error_logger.setLevel(logging.ERROR) def debug(self, msg, *args, **kwargs): self.info_logger.debug(msg, *args, **kwargs) def info(self, msg, *args, **kwargs): self.info_logger.info(msg, *args, **kwargs) def warn(self, msg, *args, **kwargs): self.info_logger.warning(msg, *args, **kwargs) def warning(self, msg, *args, **kwargs): self.info_logger.warning(msg, *args, **kwargs) def error(self, msg, *args, **kwargs): self.error_logger.error(msg, *args, **kwargs) def fatal(self, msg, *args, **kwargs): self.error_logger.fatal(msg, *args, **kwargs) def critical(self, msg, *args, **kwargs): self.error_logger.critical(msg, *args, **kwargs) # log =logger() # log.info("jdshskh") # log.error("hdskck") # log.debug("1122debug") # log.warn("warn") # log.warning("warning") # log.critical("critical") # log.fatal("fatal") log =logger("celery") log.info("jdshskh") log.error("hdskck") log.debug("1122debug") log.warn("warn") log.warning("warning") log.critical("critical") log.fatal("fatal")
python3 import logging报错:RecursionError: maximum recursion depth exceeded while calling a Python
python3不用import logging,因为logging已经内置了。
参考:https://stackoverflow.com/questions/32386469/logging-module-not-working-with-python3
报错:RecursionError: maximum recursion depth exceeded while calling a Python object
# python3 运行 import logging报错
Traceback (most recent call last):
File "/home/xxx/folder1/utee/misc.py", line 32, in info
self.init('/tmp', 'tmp.log')
File "/home/xxx/folder1/utee/misc.py", line 22, in init
print(log_file)
File "/home/xxx/folder1/utee/misc.py", line 32, in info
self.init('/tmp', 'tmp.log')
...
File "/home/xxx/folder1/utee/misc.py", line 32, in info
self.init('/tmp', 'tmp.log')
File "/home/xxx/folder1/utee/misc.py", line 17, in init
import logging
RecursionError: maximum recursion depth exceeded while calling a Python object
python3 pip3 安装 logging报错:
url: /simple/logging/ (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)'),))
$ sudo -H pip3 --proxy=xx.xxx.xx.xxx:8080 install logging
# 报错内容:SSL报错。
Collecting logging
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)'),)': /simple/logging/
WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)'),)': /simple/logging/
WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)'),)': /simple/logging/
WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)'),)': /simple/logging/
WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)'),)': /simple/logging/
Could not fetch URL https://pypi.org/simple/logging/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/logging/ (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)'),)) - skipping
ERROR: Could not find a version that satisfies the requirement logging (from versions: none)
ERROR: No matching distribution found for logging
# 解决:设置可信的域名。 (--trusted-host pypi.org --trusted-host files.pythonhosted.org)
$ sudo -H pip3 --proxy=xx.xxx.xx.xxx:8080 --trusted-host pypi.org --trusted-host files.pythonhosted.org install logging
还是报错: raise NotImplementedError, 'emit must be implemented '\
# 报错内容
Collecting logging
Downloading https://files.pythonhosted.org/packages/93/4b/979db9e44be09f71e85c9c8cfc42f258adfb7d93ce01deed2788b2948919/logging-0.4.9.6.tar.gz (96kB)
|▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒| 102kB 529kB/s
ERROR: Command errored out with exit status 1:
command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-u8g87k38/logging/setup.py'"'"'; __file__='"'"'/tmp/pip-install-u8g87k38/logging/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base pip-egg-info
cwd: /tmp/pip-install-u8g87k38/logging/
Complete output (44 lines):
running egg_info
creating pip-egg-info/logging.egg-info
writing pip-egg-info/logging.egg-info/PKG-INFO
writing dependency_links to pip-egg-info/logging.egg-info/dependency_links.txt
writing top-level names to pip-egg-info/logging.egg-info/top_level.txt
writing manifest file 'pip-egg-info/logging.egg-info/SOURCES.txt'
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/pip-install-u8g87k38/logging/setup.py", line 13, in <module>
packages = ["logging"],
File "/usr/lib/python3.5/distutils/core.py", line 148, in setup
dist.run_commands()
File "/usr/lib/python3.5/distutils/dist.py", line 955, in run_commands
self.run_command(cmd)
File "/usr/lib/python3.5/distutils/dist.py", line 974, in run_command
cmd_obj.run()
File "/usr/local/lib/python3.5/dist-packages/setuptools-19.6-py3.5.egg/setuptools/command/egg_info.py", line 186, in run
File "/usr/local/lib/python3.5/dist-packages/setuptools-19.6-py3.5.egg/setuptools/command/egg_info.py", line 209, in find_sources
File "/usr/local/lib/python3.5/dist-packages/setuptools-19.6-py3.5.egg/setuptools/command/egg_info.py", line 293, in run
File "/usr/local/lib/python3.5/dist-packages/setuptools-19.6-py3.5.egg/setuptools/command/egg_info.py", line 322, in add_defaults
File "/usr/local/lib/python3.5/dist-packages/setuptools-19.6-py3.5.egg/setuptools/command/sdist.py", line 120, in add_defaults
File "/usr/lib/python3.5/distutils/cmd.py", line 298, in get_finalized_command
cmd_obj = self.distribution.get_command_obj(command, create)
File "/usr/lib/python3.5/distutils/dist.py", line 846, in get_command_obj
klass = self.get_command_class(command)
File "/usr/local/lib/python3.5/dist-packages/setuptools-19.6-py3.5.egg/setuptools/dist.py", line 430, in get_command_class
File "/usr/local/lib/python3.5/dist-packages/setuptools-19.6-py3.5.egg/pkg_resources/__init__.py", line 2370, in load
File "/usr/local/lib/python3.5/dist-packages/setuptools-19.6-py3.5.egg/pkg_resources/__init__.py", line 2376, in resolve
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 664, in _load_unlocked
File "<frozen importlib._bootstrap>", line 634, in _load_backward_compatible
File "/usr/local/lib/python3.5/dist-packages/setuptools-19.6-py3.5.egg/setuptools/command/build_py.py", line 15, in <module>
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 664, in _load_unlocked
File "<frozen importlib._bootstrap>", line 634, in _load_backward_compatible
File "/usr/local/lib/python3.5/dist-packages/setuptools-19.6-py3.5.egg/setuptools/lib2to3_ex.py", line 12, in <module>
File "/usr/lib/python3.5/lib2to3/refactor.py", line 19, in <module>
import logging
File "/tmp/pip-install-u8g87k38/logging/logging/__init__.py", line 618
raise NotImplementedError, 'emit must be implemented '\
^
SyntaxError: invalid syntax
----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。