1.创建一个日志对象,代码如下
import logging
#创建一个日志对象,传入对象名称
logger = logging.getLogger("test")
print(logger.name)
控制台输出如下
test
2,定义日志对象的输出等级,输出等级从大到小依次为:CRITICAL、ERROR、WARNING、INFO、DEBUG、NOTEST。代码如下:
import logging
#创建一个日志对象
logger = logging.getLogger("test")
logging.basicConfig()
#定义日志的输出等级,不小于INFO的日志将被输出
logger.setLevel(logging.INFO)
logger.warning("我是一个warning日志")
logger.info("我是一个info日志")
#debug等级小于info,不在控制台打印
logger.debug("我是一个debug日志")
控制台输出入下:
WARNING:test:我是一个warning日志
INFO:test:我是一个info日志
3.定义日志输出的方式。对象名.addHandler(logging.StreamHandler())--日志在控制台输出。对象名.addHandler(logging.FileHandler("文件名"))--日志在指定文件输出。文件名不加路径时,日志文件创建在当前脚本运行的目录下。如果加路径,日志文件创建在指定路径下。
import logging
#创建一个日志对象
logger = logging.getLogger("test")
#定义控制台输出日志
logger.addHandler(logging.StreamHandler())
#定义文件输出日志,必传参数为filename,filename = os.fspath(filename)
logger.addHandler(logging.FileHandler("test.log"))
#定义日志的输出等级,不小于INFO的日志将被输出
logger.setLevel(logging.INFO)
logger.warning("我是一个warning日志")
4.定义不同输出方式日志输出等级。定义控制台输出的等级为info,文件输出的等级为warning,具体代码如下
import logging
#创建一个日志对象
logger = logging.getLogger("test")
#设置日志的输出等级
logger.setLevel(logging.DEBUG)
#定义StreamHandler,用于控制台输入
sh = logging.StreamHandler()
#定义StreamHandler的输出等级
sh.setLevel(logging.INFO)
#将sh添加到logger中
logger.addHandler(sh)
#定义FileHandler,用于文件输出
fh = logging.FileHandler("test.log",encoding="utf-8")
#定义FileHandler的输出等级
fh.setLevel(logging.WARNING)
#将fh添加到logger中
logger.addHandler(fh)
#输出日志
logger.warning("我是一个warning日志")
logger.info("我是一个info日志")
控制台输出:
我是一个warning日志
我是一个info日志
文件输出内容:
我是一个warning日志
5.输出日志的格式代码如下
import logging
logger = logging.getLogger("test")
logger.setLevel(logging.DEBUG)
#定义日志的输出格式
fmt = logging.Formatter('%(name)s - %(levelname)s - %(asctime)s - %(message)s')
sh = logging.StreamHandler()
sh.setLevel(logging.INFO)
#添加fmt到sh
sh.setFormatter(fmt)
logger.addHandler(sh)
#输出日志
logger.warning("我是一个warning日志")
logger.info("我是一个info日志")
控制台输出:
test - WARNING - 2019-08-05 11:26:27,477 - 我是一个warning日志
test - INFO - 2019-08-05 11:26:27,477 - 我是一个info日志
6.日志类的封装
class Looger(object):
def __init__(self,log_name,log_path):
#创建日志对象
self.logger = logging.getLogger(log_name)
self.logger.setLevel(logging.DEBUG)
#定义日志输出格式
fmt = logging.Formatter('%(name)s - %(levelname)s '
'- %(asctime)s - %(message)s')
#定义控制台输出
sh = logging.StreamHandler()
sh.setLevel(logging.INFO)
sh.setFormatter(fmt)
self.logger.addHandler(sh)
# 创建一个handler,用于写入日志文件
rq = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))
# 日志路径
flie_name = log_path + "/" + rq + '.log'
print(flie_name)
# 如果不存在定义的日志目录就创建一个
if not os.path.isdir(log_path):
os.mkdir(log_path)
#定义文件
fh = logging.FileHandler(flie_name,encoding="utf-8")
fh.setLevel(logging.DEBUG)
fh.setFormatter(fmt)
self.logger.addHandler(fh)
def log(self):
return self.logger
if __name__ == "__main__":
log_path = os.path.dirname(__file__)
my_log = Looger("test001",log_path)
my_log.log().info("我是一个info日志")