公司做网站app入什么科目,wordpress首页加广告代码,规划和设计一个网站,wordpress 同步 朋友圈文章目录 #x1f680;一、了解日志#x1f308;二、日志作用#x1f308;三、了解日志模块⭐四、日志级别#x1f4a5;五、记录日志-基础❤️六、记录日志-处理器handler#x1f3ac;七、记录日志-格式化记录☔八、记录日志-配置logger#x1f44a;九、流程梳理 #x… 文章目录 一、了解日志二、日志作用三、了解日志模块⭐四、日志级别五、记录日志-基础❤️六、记录日志-处理器handler七、记录日志-格式化记录☔八、记录日志-配置logger九、流程梳理 一、了解日志 日志是记录了一系列事件或活动的文件。在计算机领域它通常用于记录程序或系统的运行状况和维护信息以便在需要时进行故障排除或回溯。通过分析日志文件管理员可以了解系统的使用情况、问题发生的原因以及如何解决这些问题。
日志通常包含时间戳、事件描述、错误消息、警报等信息。它们可以按照不同的标准来分类和过滤例如按照事件类型、日志级别、时间戳范围等。常见的日志类型包括系统日志、安全日志、应用程序日志等。
二、日志作用
调试和故障排除通过分析日志文件可以了解系统崩溃或出现异常的原因进而进行修复和调试。性能调优通过记录系统性能指标和资源利用情况等信息管理员可以了解系统的瓶颈所在从而进行针对性的优化。安全审计日志可以记录系统的安全事件、访问控制和行为审计等信息以便于发现并防止潜在的安全问题。统计分析管理员可以通过日志记录用户行为、系统使用情况、网络流量等信息进行统计分析以便于优化服务和提高用户满意度。
三、了解日志模块
logging 模块提供了一种灵活且易于使用的方式来记录应用程序的状态和调试信息。它允许将消息分发到多个处理程序handlers并支持不同级别的日志消息。logging模块是Python内置的标准模块主要用于输出运行日志可以设置输出日志的等级、日志保存路径、日志文件回滚等⭐四、日志级别
在 logging 模块中日志级别用于描述日志的重要程度。它们按照严重程度分为以下五个级别DEBUG最详细的日志信息通常只在调试问题时使用INFO确认一切按预期运行WARNING表示发生了一些意外或异常情况但是该软件还可以正常运行ERROR由于更严重的问题软件已无法执行某些功能CRITICAL严重错误表明程序本身可能无法继续运行。默认情况下logging 组件会关闭低级别的日志消息并仅记录 WARNING 级别及其以上的消息。如果需要记录更多详细信息则需要将 Logger 的 level 属性设置为其他级别。
# DEBUG
# 最详细的调试信息通常只在开发阶段使用。通过记录变量值、函数参数、分支走向等信息帮助调试人员解决问题。# INFO
# INFO 级别的日志通常用于确认系统正在按预期运行。例如记录请求的处理时间、数据库操作数量、任务的完成状态等。# WARNING
# WARNING 级别的日志表示出现了一些意外或异常情况但是该软件还可以正常运行。例如数据缺失或配置文件格式错误等。# ERROR
# ERROR 级别的日志表示由于更严重的问题软件已无法执行某些功能。例如数据库连接失败、文件无法打开等错误。# CRITICAL
# 最高级别的日志级别用于记录严重错误表明程序本身可能无法继续运行。例如内存耗尽、服务器崩溃等。在应用程序中通常会使用多个不同的日志级别来记录不同类型的事件。这使得开发人员可以快速识别和排除问题并加快故障排除的过程。
# 开发应用程序或部署开发环境时
# 可以使用DEBUG或INFO级别的日志获取尽可能详细的日志信息来进行开发或部署调试
#
#
#
# 应用上线或部署生产环境时应该使用WARNING或ERROR或CRITICAL级别的日志来降低机器的I/O压力和提高获取错误日志信息的效率。
# 日志级别的指定通常都是在应用程序的配置文件中进行指定的。
#
#
#
# 说明
#
# -上面列表中的日志等级是从上到下依次升高的
# 即DEBUG INFO WARNING ERROR CRITICAL
# 而日志的信息量是依次减少的
#
# -当为某个应用程序指定一个日志级别后
# 应用程序会记录所有日志级别大于或等于指定日志级别的日志信息
# 而不是仅仅记录指定级别的日志信息
# nginx、php等应用程序以及这里的python的logging模块都是这样的。
# 同样logging模块也可以指定日志记录器的日志级别
# 只有级别大于或等于该指定日志级别的日志记录才会被输出小于该等级的日志记录将会被丢弃。五、记录日志-基础
logging.getLogger(nameNone) 是 logging 模块中的一个重要函数用于创建并返回一个 logger 对象。这个函数可以接受一个字符串作为参数该字符串表示要创建的 logger 的名称。如果未提供名称则会创建一个名为 root 的默认 logger。
import logging# 创建一个 logger
logger logging.getLogger(my_logger)
logger.setLevel(logging.INFO)# 将 StreamHandler 添加到 logger 中 --- StreamHandler处理器将日志消息输出到标准输出或标准错误流。
logger.addHandler(logging.StreamHandler())# 记录一条日志消息
logger.info(This is an info message)logging 模块定义了五个日志级别从低到高DEBUG、INFO、WARNING、ERROR 和 CRITICAL。默认情况下只有 WARNING 以及更高级别的日志消息才会被记录。可以通过设置 Logger 的日志级别来控制哪些消息应该被记录。
logger.setLevel(logging.DEBUG) # 记录所有级别的日志消息import logging# 创建一个 logger
logger logging.getLogger(my_logger)# 设置日志级别
logger.setLevel(logging.DEBUG)# 将 StreamHandler 添加到 logger 中 --- StreamHandler处理器将日志消息输出到标准输出或标准错误流。
logger.addHandler(logging.StreamHandler())# 发布日志消息
logger.debug(This is a debug message)# 创建了一个名为 my_logger 的 logger设置其日志级别为 DEBUG并发布了一条 DEBUG 级别的日志消息。logging模块定义的模块级别的常用函数
函数说明logging.debug(msg, *args, **kwargs)创建一条严重级别为DEBUG的日志记录logging.info(msg, *args, **kwargs)创建一条严重级别为INFO的日志记录logging.warning(msg, *args, **kwargs)创建一条严重级别为WARNING的日志记录logging.error(msg, *args, **kwargs)创建一条严重级别为ERROR的日志记录logging.critical(msg, *args, **kwargs)创建一条严重级别为CRITICAL的日志记录logging.log(level, *args, **kwargs)创建一条严重级别为level的日志记录logging.basicConfig(**kwargs)对root logger进行一次性配置 logging.log() 函数的参数说明level指定要记录的日志级别可选的取值有 DEBUG、INFO、WARNING、ERROR、CRITICAL。*args需要记录的一个或多个日志消息字符串。**kwargs可选参数包括 extra、exc_info、stack_info、etc.import logging
# 创建一个 logger
logger logging.getLogger(my_logger)
# 设置日志级别
logger.setLevel(logging.DEBUG)
# 将 StreamHandler 添加到 logger 中 --- StreamHandler处理器将日志消息输出到标准输出或标准错误流。
# logger.addHandler(logging.StreamHandler())
# 将一条消息记录到日志文件或控制台
logging.log(logging.INFO, This is an info message)❤️六、记录日志-处理器handler
在 logging 模块中处理器handler是一种组件可以将日志记录到不同的位置例如输出到文件、发送到电子邮件、发布至网络等等。每个 logger 可以拥有零个或多个 handler用于控制将记录哪些消息到哪个位置。
logging 模块支持多种类型的处理器
# StreamHandler将日志消息输出到标准输出或标准错误流。
#
# FileHandler将日志消息输出到指定的文件中。
#
# RotatingFileHandler类似于 FileHandler但它可以自动轮换多个日志文件以避免一个文件太大而无法存储问题。
#
# SMTPHandler向指定的邮件地址发送日志消息。
#
# SysLogHandler向系统日志服务syslog输出日志消息。
#
# NTEventLogHandler向 Windows 事件日志输出日志消息。import logging# 创建一个 logger
logger logging.getLogger(my_logger)
logger.setLevel(logging.INFO)# 创建一个 StreamHandler 并设置日志级别为 INFO
console_handler logging.StreamHandler()
console_handler.setLevel(logging.INFO)# 将 StreamHandler 添加到 logger 中
logger.addHandler(console_handler)# 记录一条日志消息
logger.info(This is an info message)# 首先创建了名为 my_logger 的 logger 对象将其日志级别设置为 INFO。
# 然后创建了一个名为 console_handler 的 StreamHandler 并将它的日志级别设置为 INFO。
# 最后将 handler 添加到 logger 中并通过 logger.info() 方法发布一条 INFO 级别的日志消息。使用处理器 handler 可以扩展 logging 模块的功能并将日志记录到不同的位置这对于应用程序的运行时跟踪或调试非常有用。
七、记录日志-格式化记录
在 logging 模块中格式化记录Formatted log record是一种将日志消息格式化为字符串的方式以便于输出和阅读。可以使用 Formatter 类来创建自定义的格式化记录以满足特定应用程序需求。
logging模块中定义好的可以用于format格式字符串说明
字段/属性名称使用格式描述asctime%(asctime)s将日志的时间构造成可读的形式默认情况下是‘2016-02-08 12:00:00,123’精确到毫秒name%(name)s所使用的日志器名称默认是’root’因为默认使用的是 rootLoggerfilename%(filename)s调用日志输出函数的模块的文件名 pathname的文件名部分包含文件后缀funcName%(funcName)s由哪个function发出的log 调用日志输出函数的函数名levelname%(levelname)s日志的最终等级被filter修改后的message%(message)s日志信息 日志记录的文本内容lineno%(lineno)d当前日志的行号 调用日志输出函数的语句所在的代码行levelno%(levelno)s该日志记录的数字形式的日志级别10, 20, 30, 40, 50pathname%(pathname)s完整路径 调用日志输出函数的模块的完整路径名可能没有process%(process)s当前进程 进程ID。可能没有processName%(processName)s进程名称Python 3.1新增thread%(thread)s当前线程 线程ID。可能没有threadName%(thread)s线程名称module%(module)s调用日志输出函数的模块名 filename的名称部分不包含后缀即不包含文件后缀的文件名created%(created)f当前时间用UNIX标准的表示时间的浮点数表示 日志事件发生的时间–时间戳就是当时调用time.time()函数返回的值relativeCreated%(relativeCreated)d输出日志信息时的自Logger创建以 来的毫秒数 日志事件发生的时间相对于logging模块加载时间的相对毫秒数msecs%(msecs)d日志事件发生事件的毫秒部分。logging.basicConfig()中用了参数datefmt将会去掉asctime中产生的毫秒部分可以用这个加上
import logging# 创建一个 logger 对象并设置其日志级别为 INFO
logger logging.getLogger(my_logger)
logger.setLevel(logging.INFO)# 创建一个 FileHandler将日志记录到文件 example.log 中
fh logging.FileHandler(example.log)# 将 FileHandler 添加到 logger 中
logger.addHandler(fh)# 创建一个 Formatter 对象并设置日志消息的格式
formatter logging.Formatter(%(asctime)s - %(name)s - %(levelname)s - %(message)s)
fh.setFormatter(formatter)# 记录一条 INFO 级别的日志消息
logger.info(This is an info message)# 创建了名为 my_logger 的 logger 对象并将其日志级别设为 INFO。接着创建了一个 FileHandler 对象并将其添加到 logger 对象中。然后通过 Formatter 类创建了一个格式化记录对象 formatter并将其设置为日志消息的格式。最后将 formatter 对象添加到 FileHandler 对象中以便对每条日志消息进行格式化处理。# 当调用 logger.info() 方法写入日志消息时该消息会被传递给已经设置了格式化记录的 FileHandler 对象并格式化为指定的字符串格式。例如如果设置了 %(asctime)s - %(name)s - %(levelname)s - %(message)s 的格式化字符串则会在每条日志消息中输出时间戳、logger 对象的名称、日志级别和消息内容。import logging# 创建一个 logger 对象并设置其日志级别为 INFO
logger logging.getLogger(my_logger)
logger.setLevel(logging.INFO)# 创建一个 FileHandler用于将日志记录到文件 example.log 中
fh logging.FileHandler(example.log)# 设置 FileHandler 的日志级别为 DEBUG
fh.setLevel(logging.DEBUG)# 创建一个 Formatter 对象用于设置日志消息的格式
formatter logging.Formatter(%(asctime)s - %(name)s - %(levelname)s - %(message)s)# 将 Formatter 对象添加到 FileHandler 中
fh.setFormatter(formatter)# 将 FileHandler 添加到 logger 对象中
logger.addHandler(fh)# 记录一条 INFO 级别的日志消息
logger.info(This is an info message)# 记录一条 DEBUG 级别的日志消息
logger.debug(This is a debug message)# 首先创建了名为 my_logger 的 logger 对象并设置其日志级别为 INFO。接着创建了一个 FileHandler 对象并指定要将日志记录到文件 example.log 中。然后将 FileHandler 的日志级别设置为 DEBUG并创建一个 Formatter 对象以控制日志消息的格式。最后将 Formatter 对象和 FileHandler 对象添加到 logger 中。# 在 logger 对象准备就绪后可以通过调用 logger.info() 和 logger.debug() 方法发布不同级别的日志消息。这些消息将分别记录在 example.log 文件中其中 INFO 级别的消息包含时间戳、logger 名称、日志级别和消息内容等信息而 DEBUG 级别的消息则包含更多的细节信息例如变量值和程序状态等。格式化记录提供了一种控制和定制日志消息输出格式的方法使其更容易阅读和理解。通过使用 Formatter 类可以创建自定义的格式化记录并将其添加到 logger 对象中以实现更灵活和有用的日志记录方案。
☔八、记录日志-配置logger
在 logging 模块中可以使用 basicConfig() 函数或者通过编程的方式来配置 logger 对象的属性和行为。通常情况下在应用程序开始执行时调用 basicConfig() 函数即可完成全局的基本配置。
logging.basicConfig参数字段
参数名称描述filename指定日志输出目标文件的文件名可以写文件名也可以写文件的完整的绝对路径写文件名日志放执行文件目录下写完整路径按照完整路径生成日志文件指定该设置项后日志信息就不会被输出到控制台了filemode指定日志文件的打开模式默认为’a’。需要注意的是该选项要在filename指定时才有效format指定日志格式字符串即指定日志输出时所包含的字段信息以及它们的顺序。logging模块定义的格式字段下面会列出。datefmt指定日期/时间格式。需要注意的是该选项要在format中包含时间字段%(asctime)s时才有效level指定日志器的日志级别stream指定日志输出目标stream如sys.stdout、sys.stderr以及网络stream。需要说明的是stream和filename不能同时提供否则会引发 ValueError异常stylePython 3.2中新添加的配置项。指定format格式字符串的风格可取值为’%‘、’{‘和’$‘默认为’%’handlersPython 3.3中新添加的配置项。该选项如果被指定它应该是一个创建了多个Handler的可迭代对象这些handler将会被添加到root logger。需要说明的是filename、stream和handlers这三个配置项只能有一个存在不能同时出现2个或3个否则会引发ValueError异常。
%Y 四位数的年份表示000-9999
%y 两位数的年份表示00-99
%m 月份01-12
%d 月内中的一天0-31
%H 24小时制小时数0-23
%I 12小时制小时数01-12
%M 分钟数00-59
%S 秒00-59
%p 上午AM 下午 PM
import logginglogging.basicConfig(filenameexample.log, levellogging.DEBUG,format%(asctime)s - %(name)s - %(levelname)s - %(message)s,datefmt%m/%d/%Y %I:%M:%S %p)# 记录一条日志消息
logging.info(This is an info message)# 首先调用了 basicConfig() 函数并传递了一些参数来设置日志记录器的属性。例如指定了要将日志消息记录到文件 example.log 中设置了默认日志级别为 DEBUG指定了日期时间格式以及设置了一个自定义的日志消息格式。
# 之后可以通过标准的日志记录函数如 logging.info()来记录日志消息这些函数都将根据 global basicConfig() 配置的内容记录日志。
需要注意的是如果在多个模块或文件中使用相同的 logger 对象则必须确保在所有地方都调用了 basicConfig() 函数或者手动对所有 logger 对象进行配置。否则可能会出现不同部分记录的日志信息不一致的问题。总之无论是使用 basicConfig() 函数还是编程方式来配置 logger 对象都需要了解每个参数的含义和作用并根据具体应用场景去设置它们。这些参数包括日志文件名、日志级别、日期时间格式、日志消息格式等方面。import logging# 配置全局日志记录器属性
logging.basicConfig(filenameexample.log, levellogging.DEBUG,format%(asctime)s - %(name)s - %(levelname)s - %(message)s,datefmt%m/%d/%Y %I:%M:%S %p)# 创建一个 logger 对象
logger logging.getLogger(my_logger)
logger.setLevel(logging.DEBUG)# 给 logger 添加处理程序 ConsoleHandler将日志消息输出到控制台
ch logging.StreamHandler()
ch.setLevel(logging.DEBUG)
logger.addHandler(ch)# 记录不同级别的日志消息
logger.debug(This is a debug message)
logger.info(This is an info message)
logger.warning(This is a warning message)
logger.error(This is an error message)
logger.critical(This is a critical message)九、流程梳理
# 1、创建一个logger# 2、设置下logger的日志的等级# 3、创建合适的Handler(FileHandler要有路径)# 4、设置下每个Handler的日志等级# 5、创建下日志的格式# 6、向Handler中添加上面创建的格式# 7、将上面创建的Handler添加到logger中# 8、打印输出logger.debug\logger.info\logger.warning\logger.error\logger.criticalimport logging# 配置全局日志记录器属性
#logging.basicConfig(filenameexample.log, levellogging.DEBUG,format%(asctime)s - %(name)s - %(levelname)s - %(message)s,datefmt%m/%d/%Y %I:%M:%S %p)# 创建logger如果参数为空则返回root logger
logger logging.getLogger(nick)
logger.setLevel(logging.DEBUG) # 设置logger日志等级# 创建handler
fh logging.FileHandler(example.log, encodingutf-8)
ch logging.StreamHandler()# 设置输出日志格式
formatter logging.Formatter(fmt%(asctime)s %(name)s %(filename)s %(message)s,datefmt%Y/%m/%d %X
)# 注意 logging.Formatter的大小写# 为handler指定输出格式注意大小写
fh.setFormatter(formatter)
ch.setFormatter(formatter)# 为logger添加的日志处理器
logger.addHandler(fh)
logger.addHandler(ch)# 输出不同级别的log
logger.warning(警告)
logger.info(提示)
logger.error(错误) 文章转载自: http://www.morning.rytps.cn.gov.cn.rytps.cn http://www.morning.dhyqg.cn.gov.cn.dhyqg.cn http://www.morning.fxjnn.cn.gov.cn.fxjnn.cn http://www.morning.hnk25076he.cn.gov.cn.hnk25076he.cn http://www.morning.wwznd.cn.gov.cn.wwznd.cn http://www.morning.cjxqx.cn.gov.cn.cjxqx.cn http://www.morning.gqcsd.cn.gov.cn.gqcsd.cn http://www.morning.jgnjl.cn.gov.cn.jgnjl.cn http://www.morning.gcfrt.cn.gov.cn.gcfrt.cn http://www.morning.xtrzh.cn.gov.cn.xtrzh.cn http://www.morning.lcjw.cn.gov.cn.lcjw.cn http://www.morning.gjlml.cn.gov.cn.gjlml.cn http://www.morning.ltfnl.cn.gov.cn.ltfnl.cn http://www.morning.nxdqz.cn.gov.cn.nxdqz.cn http://www.morning.sfwd.cn.gov.cn.sfwd.cn http://www.morning.zfqr.cn.gov.cn.zfqr.cn http://www.morning.dbcw.cn.gov.cn.dbcw.cn http://www.morning.xkzr.cn.gov.cn.xkzr.cn http://www.morning.pbmg.cn.gov.cn.pbmg.cn http://www.morning.bfybb.cn.gov.cn.bfybb.cn http://www.morning.zkdbx.cn.gov.cn.zkdbx.cn http://www.morning.qkgwz.cn.gov.cn.qkgwz.cn http://www.morning.lpcct.cn.gov.cn.lpcct.cn http://www.morning.kmprl.cn.gov.cn.kmprl.cn http://www.morning.ddrdt.cn.gov.cn.ddrdt.cn http://www.morning.xppj.cn.gov.cn.xppj.cn http://www.morning.fqqlq.cn.gov.cn.fqqlq.cn http://www.morning.lyldhg.cn.gov.cn.lyldhg.cn http://www.morning.dqgbx.cn.gov.cn.dqgbx.cn http://www.morning.lsnbx.cn.gov.cn.lsnbx.cn http://www.morning.kjgdm.cn.gov.cn.kjgdm.cn http://www.morning.spbp.cn.gov.cn.spbp.cn http://www.morning.pcgrq.cn.gov.cn.pcgrq.cn http://www.morning.pjzcp.cn.gov.cn.pjzcp.cn http://www.morning.xtrnx.cn.gov.cn.xtrnx.cn http://www.morning.kjlhb.cn.gov.cn.kjlhb.cn http://www.morning.mhsmj.cn.gov.cn.mhsmj.cn http://www.morning.bdfph.cn.gov.cn.bdfph.cn http://www.morning.jkfyt.cn.gov.cn.jkfyt.cn http://www.morning.rqjl.cn.gov.cn.rqjl.cn http://www.morning.fjkkx.cn.gov.cn.fjkkx.cn http://www.morning.ckhry.cn.gov.cn.ckhry.cn http://www.morning.drggr.cn.gov.cn.drggr.cn http://www.morning.zdydj.cn.gov.cn.zdydj.cn http://www.morning.nytgk.cn.gov.cn.nytgk.cn http://www.morning.mlffg.cn.gov.cn.mlffg.cn http://www.morning.xdxpq.cn.gov.cn.xdxpq.cn http://www.morning.rhmk.cn.gov.cn.rhmk.cn http://www.morning.pxjp.cn.gov.cn.pxjp.cn http://www.morning.gbsby.cn.gov.cn.gbsby.cn http://www.morning.xjnw.cn.gov.cn.xjnw.cn http://www.morning.zwwhq.cn.gov.cn.zwwhq.cn http://www.morning.lpqgq.cn.gov.cn.lpqgq.cn http://www.morning.kmlmf.cn.gov.cn.kmlmf.cn http://www.morning.zrjzc.cn.gov.cn.zrjzc.cn http://www.morning.smtrp.cn.gov.cn.smtrp.cn http://www.morning.qyhcm.cn.gov.cn.qyhcm.cn http://www.morning.gsdbg.cn.gov.cn.gsdbg.cn http://www.morning.rqjl.cn.gov.cn.rqjl.cn http://www.morning.rrxgx.cn.gov.cn.rrxgx.cn http://www.morning.bcdqf.cn.gov.cn.bcdqf.cn http://www.morning.qyhcg.cn.gov.cn.qyhcg.cn http://www.morning.nrcbx.cn.gov.cn.nrcbx.cn http://www.morning.rcwbc.cn.gov.cn.rcwbc.cn http://www.morning.dpnhs.cn.gov.cn.dpnhs.cn http://www.morning.kkrnm.cn.gov.cn.kkrnm.cn http://www.morning.pfkrw.cn.gov.cn.pfkrw.cn http://www.morning.jjsxh.cn.gov.cn.jjsxh.cn http://www.morning.nrbqf.cn.gov.cn.nrbqf.cn http://www.morning.skrww.cn.gov.cn.skrww.cn http://www.morning.nlkm.cn.gov.cn.nlkm.cn http://www.morning.kxyqy.cn.gov.cn.kxyqy.cn http://www.morning.gpkjx.cn.gov.cn.gpkjx.cn http://www.morning.rdzgm.cn.gov.cn.rdzgm.cn http://www.morning.tfpmf.cn.gov.cn.tfpmf.cn http://www.morning.xfjwm.cn.gov.cn.xfjwm.cn http://www.morning.rqbkc.cn.gov.cn.rqbkc.cn http://www.morning.niukaji.com.gov.cn.niukaji.com http://www.morning.ghccq.cn.gov.cn.ghccq.cn http://www.morning.fxxmj.cn.gov.cn.fxxmj.cn