一.日志基础
1.什么是日志?
记录软件运行状态,几时几分,运行了什么模块,传递什么请求
2.日志的作用?
可以用来分析问题信息
3.日志等级?
- [Debug]调式
- [Error]:错误输出
- [Warning]
- [Critical]/[Fatal]
3.日志组成
日志收集器logger——系统默认是RootLogger
日志输出渠道handlers 控制台或者文件
二.示例
1.示例1
import logging
logging.debug("debug")
logging.info("info")
logging.warning("warning")
logging.error("error")
logging.critical("crital")
结果:系统默认的日志收集器就是级别是warming级别起步的,所以输出的日志是从
WARNING:root:warning
ERROR:root:error
CRITICAL:root:crital
2.示例2
1.定义一个日志收集器并设置级别
my_logger = logging.getLogger("python")
my_logger.setLevel("DEBUG")
2.指定输出渠道
- StreamHandler——控制台
- FileHandler 输出指定文件,设定级别
ch_1 = logging.StreamHandler()
ch = logging.FileHandler("text.log",encoding="UTF-8")
ch.setLevel("DEBUG")
3.建立连接
my_logger.addHandler(ch)
my_logger.debug("debug")
my_logger.info("info")
my_logger.warning("warning")
my_logger.error("error")
my_logger.critical("crital")
最后日志的输出级别是收集器和输出渠道的交集
4.关闭连接
my_logger.removeFilter(ch)
my_logger.removeFilter(ch_1)
3.Formatter 格式化器
单个格式设定
%(levelname)s
python语言设定格式
formatter = logging.Formatter("%(levelname)s")
ch = logging.StreamHandler()
ch.setLevel("DEBUG")
ch.setFormatter(formatter)
Formatter常用日志格式
formatter = logging.Formatter("[%(asctime)s]-[%(levelname)s]-%(filename)s-%(name)s-日志信息:%(message)s")
[2019-03-02 14:29:25,005]-[DEBUG]-py_log.py-pyLog-日志信息:debug
[2019-03-02 14:29:25,005]-[INFO]-py_log.py-pyLog-日志信息:info
[2019-03-02 14:29:25,005]-[WARNING]-py_log.py-pyLog-日志信息:warning
[2019-03-02 14:29:25,005]-[ERROR]-py_log.py-pyLog-日志信息:error
[2019-03-02 14:29:25,005]-[CRITICAL]-py_log.py-pyLog-日志信息:crital
常用Formatter格式:
格式 | 信息 |
---|---|
%(name)s | Logger的名字 |
%(levelno)s | 数字形式日志级别 |
%(levelname)s | 文本形式的日志级别 |
三.作业
- 1:编写一个日志类,能够实现输出文件到指定文件和console
- 2:结合配置文件类实现日志类的可配置,具体参考老师的代码以及视频
- 3:结合日志类以及do_excel类,加上异常判断 与日志输出
1.使用方式
可以和配置文件结合起来使用
可以和try except异常处理结合起来使用
作业
配置:
[LOG]
#log测试类
logger_name = py_log
logger_level = DEBUG
output_file_name = log.log
output_file_level = DEBUG
formatter = [%%(asctime)s]-[%%(levelname)s]-%%(filename)s-日志信息:%%(message)s
代码:
# 1:编写一个日志类,能够实现输出文件到指定文件和console
# 2:结合配置文件类实现日志类的可配置,具体参考老师的代码以及视频
# 3:结合日志类以及do_excel类,加上异常判断 与日志输出
import logging
import configparser
class MyLogger(object):
def __init__(self):
self.cf = configparser.ConfigParser()
self.cf.read("log.conf", encoding="UTF-8")
self.logger_name = self.cf.get("LOG", "logger_name")
self.logger_level = self.cf.get("LOG", "logger_level")
self.output_file_name = self.cf.get("LOG", "output_file_name")
self.output_file_level = self.cf.get("LOG", "output_file_level")
self.formatter = self.cf.get("LOG", "formatter")
def my_log(self, level, msg):
my_logger = logging.getLogger(self.logger_name)
my_logger.setLevel(self.logger_level)
ch = logging.StreamHandler()
ch_1 = logging.FileHandler(self.output_file_name, encoding="UTF-8")
ch.setLevel(self.output_file_level)
formatter = logging.Formatter(self.formatter)
ch.setFormatter(formatter)
ch_1.setFormatter(formatter)
my_logger.addHandler(ch)
my_logger.addHandler(ch_1)
if level == "DEBUG":
my_logger.debug(msg)
elif level == "INFO":
my_logger.info(msg)
elif level == "WARNING":
my_logger.warning(msg)
elif level == "ERROR":
my_logger.error(msg)
else:
my_logger.critical(msg)
my_logger.removeFilter(ch_1)
my_logger.removeFilter(ch)
def debug(self, msg):
self.my_log("DEBUG", msg)
def info(self, msg):
self.my_log("INFO", msg)
def error(self, msg):
self.my_log("ERROR", msg)
def warning(self, msg):
self.my_log("WARNING", msg)
def critical(self, msg):
self.my_log("CRITICAL", msg)
if __name__ == '__main__':
my = MyLogger()
my.error("报错了")
————————————————————————————————————愿你被世界温柔所待,996式的上班给自己带来的或许就是紧凑,以及忙碌之后的空虚感,又或许自己本身就是一个不服输的人,不甘心比别人差,逼着自己去做很多事,但实际上又不情愿。讨厌这样的人,又会不得不成为这样的人。
记得很久前玩SIM4,捏了一个娃,从青少年时候,不断练习技能,去社交,去赚钱,去提高知名度成为名人,选择社区中最好看的娃结婚生子,或许赚了很多钱,技能满级,最后到老年时光,看到他那没多少的人生期望点数,这又有什么用呢?
一直很喜欢SIM游戏,练习技能只要花时间就会提高的,无论天赋,想交的朋友只要不断友善就会提高好感度,不论什么职业都是受尊重也不会被歧视。
我们不怕努力二字,只怕努力后一无所获。