使用 YAML 和过滤器登录 python

2024-01-14

想要使用 YAML 设置带有过滤器的记录器。

YAML 配置文件config.yaml如下:

version: 1

formatters:
  simple:
    format: "%(asctime)s %(name)s: %(message)s"
  extended:
    format: "%(asctime)s %(name)s %(levelname)s: %(message)s"

filters:
  noConsoleFilter:
    class: noConsoleFilter

handlers:
  console:
    class: logging.StreamHandler
    level: INFO
    formatter: simple
    filters: [noConsoleFilter]

  file_handler:
    class: logging.FileHandler
    level: INFO
    filename: test.log
    formatter: extended

root:
  handlers: [console, file_handler]
  propagate: true

...以及主程序main.py如下:

import logging.config
import yaml

class noConsoleFilter(logging.Filter):
    def filter(self, record):
        print("filtering!")
        return not (record.levelname == 'INFO') & ('no-console' in record.msg)

with open('config.yaml', 'r') as f:
    log_cfg = yaml.safe_load(f.read())
    logging.config.dictConfig(log_cfg)  

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

logger.info("no-console. Should not be in console, but be in test.log!")
logger.info('This is an info message')
logger.error('This is an error message')

控制台中的预期输出没有“no-console”消息:

   2020-04-27 18:05:26,936 __main__: This is an info message 
   2020-04-27 18:05:26,936 __main__: This is an error message

但看起来像类:noConsoleFilter甚至没有被考虑,因为 print 语句也不起作用。

我哪里错了?我该如何修复它?


语法有点奇怪,但它在日志记录文档中进行了描述,位于用户定义的对象 https://docs.python.org/3/library/logging.config.html#logging-config-dict-userdef,你必须使用密钥(), not class。就像这样:

filters:
  noConsoleFilter:
    (): noConsoleFilter

接下来,您需要为类指定一个限定名称。如果您直接运行脚本,而不是作为模块,您可以在下面引用它__main__:

filters:
  noConsoleFilter:
    (): __main__.noConsoleFilter

我还建议使用 PEP 8类名的 CapWords 约定 https://www.python.org/dev/peps/pep-0008/#class-names。这是一个稍微整理过的、完全独立的示例:

# logging.yml
version: 1

formatters:
  simple_formatter:
    format: "%(asctime)s %(name)s: %(message)s"
  extended_formatter:
    format: "%(asctime)s %(name)s %(levelname)s: %(message)s"

filters:
  no_console_filter:
    (): __main__.NoConsoleFilter

handlers:
  console_handler:
    class: logging.StreamHandler
    level: INFO
    formatter: simple_formatter
    filters: [no_console_filter]

  file_handler:
    class: logging.FileHandler
    level: INFO
    filename: test.log
    formatter: extended_formatter

root:
  handlers: [console_handler, file_handler]
  propagate: true
# script.py
import logging.config
import yaml

class NoConsoleFilter(logging.Filter):
    def filter(self, record):
        print('filtering!')
        return not (record.levelname == 'INFO') & ('no-console' in record.msg)

with open('logging.yml', 'r') as f:
    log_cfg = yaml.safe_load(f.read())
    logging.config.dictConfig(log_cfg)

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

logger.info('no-console. Should not be in console, but be in test.log!')
logger.info('This is an info message')
logger.error('This is an error message')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 YAML 和过滤器登录 python 的相关文章

  • 安装 Pillow 和 PIL

    I have Ubuntu 12 04 http en wikipedia org wiki List of Ubuntu releases Ubuntu 12 04 LTS 28Precise Pangolin 29 Precise Pa
  • Pandas 中的索引如何工作?

    我是Python新手 这似乎是一个需要问的基本问题 但我真的很想了解这里发生了什么 import numpy as np import pandas as pd tempdata np random random 5 myseries on
  • Python 中的空填字游戏求解器

    我得到了一个包含填字游戏蓝图的矩阵 当然 它是空的 我们的目标是填补整个难题 这是 Checkio 的一项任务 我已经为此奋斗了相当长一段时间 根据我对复杂性的理解 这个问题没有完美的算法 不过 必须有最好的方法来做到这一点 对吧 我尝试了
  • 在Langchain中,为什么ConversationalRetrievalChain不记住聊天记录并为每个聊天输入新的ConversationalRetrievalChain链?

    我正在尝试使用 langchain 创建一个客户支持系统 我通过 TextLoader 使用文本文档作为外部知识提供者 为了记住聊天 我使用 ConversationalRetrievalChain 和聊天列表 我的问题是 每次执行时con
  • Django - 403 Forbidden CSRF 验证失败

    我在 Django 中为我的网站提供了一个联系表单 当我在本地测试它时 它工作正常 但现在当我尝试 实时 提交我的联系表单时 它总是出现 403 禁止 CSRF 验证失败 view def contact request if reques
  • 按自定义年度频率重新采样

    我知道我可以使用 AS JUL 从 7 月 1 日开始每年重新采样 但在不同的日期之前我该如何做 In 11 df Out 11 value date 2005 07 02 4 2005 09 20 7 2005 11 12 4 2005
  • 允许 help() 对部分函数对象起作用

    我正在努力确保跑步help 在 Python 2 7 REPL 显示 doc 对于一个被包装的函数functools partial 目前正在运行help on a functools partial 功能 显示 doc of the fu
  • 在 python 中以半小时为增量创建选择列表

    我正在尝试创建一个
  • 如何将字符串转换为二进制?

    我需要一种方法来获取 python 中字符串的二进制表示形式 例如 st hello world toBinary st 是否有一个模块可以以某种巧妙的方式执行此操作 像这样的东西吗 gt gt gt st hello world gt g
  • 如何使绘图的 xtick 标签成为简单的绘图?

    我不想用单词或数字作为 x 轴的刻度标签 而是想绘制一个简单的绘图 由直线和圆圈组成 作为每个 x 刻度的标签 这可能吗 如果是这样 在 matplotlib 中处理它的最佳方法是什么 我会删除刻度标签并将文本替换为patches http
  • PyCrypto:生成受 DES3 密码保护的 RSA 密钥

    我已经能够使用 DES3 创建受密码保护的 RSA 密钥 嗯 I think因为我对这个加密世界非常陌生 使用以下命令 openssl genrsa out tmp myKey pem passout pass f00bar des3 20
  • 从 DST 感知日期时间对象在 Dataframe 中创建 pandas DatetimeIndex

    我从在线 API 收集了一系列数据点 每个数据点都有一个值和一个 ISO 时间戳 不幸的是我需要循环它们 所以我将它们存储在临时的dict然后从中创建一个 pandas 数据帧并将索引设置为时间戳列 简化示例 from datetime i
  • 使用 Keras 时,验证集中未见的类别会出现错误

    我有由数值变量和分类变量组成的数据 分类变量有很多类别 因此我使用嵌入来表示这些类别 我的模型是一个简单的神经网络 我知道当你定义嵌入层时你需要通过input dim number of categories 1为了解释训练中看不见的类别
  • 带过滤器的 SQLAlchemy func.count

    我正在使用一个进行分页的框架 如下所示 def get count query self return self session query func count select from self model def paginate se
  • 我可以在 psycopg2 中使用 md5 身份验证吗?

    经过两个小时的阅读文档 源代码和帮助线程后 我放弃了 我无法让 psycopg2 使用 md5 字符串进行身份验证 根据this http bytes com topic python answers 42597 psycopg authe
  • 打开 PDF 到书签/指定目标?

    我正在尝试使用 python 打开特定书签的 PDF 到目前为止 我可以在命令提示符中运行以下命令并得到我想要的 last是 PDF test pdf 中指定目的地的名称 C Program Files x86 Adobe Reader 1
  • 在 Django 1.7 中使用 html 发送电子邮件

    In 发送邮件 我们有一个新参数 html message Docs https docs djangoproject com en dev topics email send mail I have 电子邮件 html文件 我想发送我的消
  • Discord-py Rewrite - Cog 中的基本 aiohttp Web 服务器

    我正在尝试将基本的 aiohttp 网络服务器集成到 Cog 中 使用 discord py 重写 我对齿轮使用以下代码 from aiohttp import web import discord from discord ext imp
  • Bokeh 中的相关图问题

    当我通过绘制数据时rect 来自 Bokeh 我在可视化中得到了一条由水平块组成的单行 数据打印正确 据我所知格式正确 type 验证它们都是列表 谁能诊断这个吗 如果问题不在这里 那么我可以附加更多代码 如果需要 在 Ubuntu 14
  • python函数中的Return语句不返回任何内容[重复]

    这个问题在这里已经有答案了 我不明白退货和打印之间的区别 有人告诉我应该在函数语句中使用 return 但它不会返回任何内容 所以我一直在函数中使用 print 但我想了解为什么我的函数中的 return 语句不起作用 def triang

随机推荐

  • Spring-Drools 集成:引用的文件 (kie-spring.xsd) 包含错误

    我正在尝试将 drools 与 Spring 一起使用 春季版本4 01 Drools Kie 版本 6 0 1 我的 kie context xml 有以下错误 在 Eclipse 中 引用的文件包含错误 http drools org
  • Yii Framework/PDO 出现错误 CDbCommand 无法执行 SQL 语句:SQLSTATE[42000]

    我尝试使用 Yii Framework 和 PDO 对象将一些数据插入表中 但出现以下错误 我正在使用此代码构建查询 connection CActiveRecord getDbConnection sql INSERT INTO sms
  • 在整行上使用 udf 过滤 Pyspark Dataframe

    有没有办法选择整行作为列输入到 Pyspark 过滤器 udf 中 我有一个复杂的过滤函数 my filter 我想将其应用于整个 DataFrame my filter udf udf lambda r my filter r Boole
  • JPA Criteria API 过滤器子实体

    代码示例 Entity public class Event Id GeneratedValue private Long id private String name OneToMany mappedBy event private Li
  • 防止 PHP date() 默认为 12/31/1969

    我正在使用 MySQL 数据库和 PHP 我使用以下命令将日期值存储在数据库中DATETIME field 我正在使用此 PHP 代码将输入的日期转换为适合 MySQL 的格式 date Y m d H i s strtotime inpu
  • 水平扩展的微服务实例是否应该共享数据库?

    给定一个拥有关系数据库并需要水平扩展的微服务 我看到两种配置数据库服务器的方法 为服务的每个实例提供其自己的数据库服务器实例 并具有耦合的流程生命周期 OR 让实例连接到共享 由同一服务的相同实例 独立数据库服务器或集群 使用事件驱动架构和
  • NotificationCompat.Builder 中出现 NoClassDefFound 错误

    这个概念是在特定时间收到通知 显然 我做到了 直到我添加了对低于以下版本的支持HoneyComb并在其上方 我已经设置了最小 SDK 版本 8 和目标 SDK 17 由于类编码要大得多 我仅显示存在问题的核心区域 int currentap
  • 为什么最好将 script 标签放在 body 标签的末尾?

    有两个与浏览器网页初始化相关的事件 DOMContentReady document object 解析 HTML 文档并构建 DOM 树 load window object HTML 文档的所有元素都被渲染 显示 根据我的理解 浏览器无
  • 无法找到捆绑的 Java 版本。 MacBook Air M1

    我在配备 intel 的 MacBook Pro 上使用 flutter 一切正常 现在我改用配备 M1 芯片的 MacBook Air 我收到错误无法找到捆绑的 Java 版本 请问我该如何解决它 扑动医生 v Flutter 频道稳定
  • 在 Apps 脚本中设置数据验证显示样式

    是否可以在应用程序脚本中设置下拉列表显示样式 检查文档后发现 API 只允许您在 箭头 和 纯文本 之间进行选择 应用程序脚本文档 https developers google com apps script reference spre
  • 无法以编程方式在 C:\inetpub\wwwroot 中创建文件

    我在 ASP NET 网页的代码后面有一个函数 它创建一个文件 然后使用 JavaScript 命令打开它 这在 IDE 中有效 它会创建文件 询问我要在哪里保存文件 我可以保存它 等等 但是当我安装网站并测试它时 我在尝试创建网站时收到
  • Internet Explorer 8 原型和 XMLHttpRequest

    这部分是对解决方法的请求 部分是试图表明 Internet Explorer 的原型实现仍然有缺陷 以下代码在 Internet Explorer 上不起作用 XMLHttpRequest prototype old XMLHttpRequ
  • 如何关闭 Safari 的预取功能?

    Safari 有一个 功能 可以在您输入网址时预加载页面 现在对于大多数用户来说 这确实是一个功能 可以加快页面加载速度 但对于 Web 开发人员来说 它可能会带来麻烦 特别是当它自动加载您之前使用过但当前无意运行的脚本 例如导入程序或后台
  • 根据 Celery 任务状态更新 Django 模型字段

    在我的模型中 我有一个status默认值为 处理 的字段 在 Django 管理界面中 用户单击 保存 按钮后 表单输入将传递给仅休眠 30 秒的 celery 任务 30 秒后 我该如何 判断celery任务是否成功 更新模型的statu
  • 如果浏览器不是 Internet Explorer 9 或更高版本,则显示一条消息

    我想向我的用户展示一个如下所示的栏 如果 浏览器不是IE 或者 浏览器为 IE 但版本为 8 或更早 请注意 屏幕截图仅用于说明 IE 9is支持我的网站 我发现了这个不错的 jQuery 插件 但我不想使用弹出窗口 http jrejec
  • x 轴刻度日期格式和位置

    我尝试使用 matplotlib 复制最初使用 flotr2 创建的绘图图以进行 pdf 输出 我必须说 flotr 更容易使用 但除此之外 我目前一直在尝试将 x 轴上的日期 时间格式化为所需的格式 即小时 分钟 每 2 小时间隔一次 如
  • 如何恢复 .condarc 中 env_prompt 参数的默认行为?

    如果你创建一个python环境conda with prefix标记并激活它 激活后环境将通过其整个路径显示 这可能是一条很长的路 因此conda 文档 https docs conda io projects conda en lates
  • Spark 中的任务不可序列化

    我有这样的转变 JavaRDD
  • WPF 本机 Windows 10 Toast

    使用 NET WPF和Windows 10 有没有办法使用c 将本地toast通知推送到操作中心 我只看到人们为此制作自定义对话框 但必须有一种方法可以通过 os 您可以使用NotifyIcon from System Windows Fo
  • 使用 YAML 和过滤器登录 python

    想要使用 YAML 设置带有过滤器的记录器 YAML 配置文件config yaml如下 version 1 formatters simple format asctime s name s message s extended form