如何在每个记录器的基础上更改 Python 日志消息的格式?

2023-12-20

读完后文档关于logging http://docs.python.org/py3k/library/logging.html#module-logging,我知道我可以使用这样的代码来执行简单的日志记录:

import logging

def main():
    logging.basicConfig(filename="messages.log",
                        level=logging.WARNING,
                        format='%(filename)s: '    
                                '%(levelname)s: '
                                '%(funcName)s(): '
                                '%(lineno)d:\t'
                                '%(message)s')

    logging.debug("Only for debug purposes\n")
    logging.shutdown()

main()

但是,我意识到我不知道如何在每个记录器的基础上更改日志消息的格式,因为basicConfig是一个模块级函数。此代码适用于创建具有不同级别、名称等的不同记录器。但是有没有一种方法也可以在每个记录器的基础上更改这些日志消息的格式,其方式类似于basicConfig?

import inspect
import logging

def function_logger(level=logging.DEBUG):
    function_name = inspect.stack()[1][3]
    logger = logging.getLogger(function_name)
    logger.setLevel(level)
    logger.addHandler(logging.FileHandler("{0}.log".format(function_name)))
    return logger

def f1():
    f1_logger = function_logger()
    f1_logger.debug("f1 Debug message")
    f1_logger.warning("f1 Warning message")
    f1_logger.critical("f1 Critical message")

def f2():
    f2_logger = function_logger(logging.WARNING)
    f2_logger.debug("f2 Debug message")
    f2_logger.warning("f2 Warning message")
    f2_logger.critical("f2 Critical message")

def main():
    f1()
    f2()
    logging.shutdown()

main()

Try this

import logging

logger = logging.getLogger('simple_example')
logger.setLevel(logging.DEBUG)
# create file handler that logs debug and higher level messages
fh = logging.FileHandler('spam.log')
fh.setLevel(logging.DEBUG)
# create console handler with a higher log level
ch = logging.StreamHandler()
ch.setLevel(logging.ERROR)
# create formatter and add it to the handlers
formatter = logging.Formatter(
    '%(asctime)s - %(name)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter)
fh.setFormatter(formatter)
# add the handlers to logger
logger.addHandler(ch)
logger.addHandler(fh)

# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')

See http://docs.python.org/howto/logging-cookbook.html#multiple-handlers-and-formatters http://docs.python.org/howto/logging-cookbook.html#multiple-handlers-and-formatters了解更多信息

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在每个记录器的基础上更改 Python 日志消息的格式? 的相关文章

  • 没有名为 crypto.cipher 的模块

    我现在正在尝试加密一段时间 我最近得到了这个基于 python 的密码器 名为PythonCrypter https github com jbertman PythonCrypter 我对 Python 相当陌生 当我尝试通过终端打开 C
  • 通过 Scrapy 抓取 Google Analytics

    我一直在尝试使用 Scrapy 从 Google Analytics 获取一些数据 尽管我是一个完全的 Python 新手 但我已经取得了一些进展 我现在可以通过 Scrapy 登录 Google Analytics 但我需要发出 AJAX
  • 在 python 程序中合并第三方库的最佳实践是什么?

    下午好 我正在为我的工作编写一个中小型Python程序 该任务需要我使用 Excel 库xlwt and xlrd 以及一个用于查询 Oracle 数据库的库 称为CX Oracle 我正在通过版本控制系统 即CVS 开发该项目 我想知道围
  • Django 管理员在模型编辑时间歇性返回 404

    我们使用 Django Admin 来维护导出到我们的一些站点的一些数据 有时 当单击标准更改列表视图来获取模型编辑表单而不是路由到正确的页面时 我们会得到 Django 404 页面 模板 它是偶尔发生的 我们可以通过重新加载三次来重现它
  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • OpenCV Python cv2.mixChannels()

    我试图将其从 C 转换为 Python 但它给出了不同的色调结果 In C Transform it to HSV cvtColor src hsv CV BGR2HSV Use only the Hue value hue create
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • 使用带有关键字参数的 map() 函数

    这是我尝试使用的循环map功能于 volume ids 1 2 3 4 5 ip 172 12 13 122 for volume id in volume ids my function volume id ip ip 我有办法做到这一点
  • Python - StatsModels、OLS 置信区间

    在 Statsmodels 中 我可以使用以下方法拟合我的模型 import statsmodels api as sm X np array 22000 13400 47600 7400 12000 32000 28000 31000 6
  • 如何使用 Ansible playbook 中的 service_facts 模块检查服务是否存在且未安装在服务器中?

    我用过service facts检查服务是否正在运行并启用 在某些服务器中 未安装特定的软件包 现在 我如何知道这个特定的软件包没有安装在该特定的服务器上service facts module 在 Ansible 剧本中 它显示以下错误
  • SQLALchemy .query:类“Car”的未解析属性引用“query”

    我有一个这里已经提到的问题https youtrack jetbrains com issue PY 44557 https youtrack jetbrains com issue PY 44557 但我还没有找到解决方案 我使用 Pyt
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且
  • ipython/ pylab/ matplotlib安装和初始化错误

    我在 OS X El Captain 上安装了 matplotlib anaconda ipython 然而 即使在尝试以所有可能的方式设置环境变量之后 我仍无法启动 ipython shell pylab 版本 这是错误 ImportEr
  • 如何使用Python创建历史时间线

    So I ve seen a few answers on here that helped a bit but my dataset is larger than the ones that have been answered prev
  • IO 密集型任务中的 Python 多线程

    建议仅在 IO 密集型任务中使用 Python 多线程 因为 Python 有一个全局解释器锁 GIL 只允许一个线程持有 Python 解释器的控制权 然而 多线程对于 IO 密集型操作有意义吗 https stackoverflow c
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我
  • NotImplementedError:无法将符号张量 (lstm_2/strided_slice:0) 转换为 numpy 数组。时间

    张量流版本 2 3 1 numpy 版本 1 20 在代码下面 define model model Sequential model add LSTM 50 activation relu input shape n steps n fe

随机推荐

  • 在 Rails 中保存和检索数组

    我正在 Rails 中开发电子学习 我想将一组数组保存到数据库中 目的是跟踪用户在电子学习各个部分的进度 我遇到过这个问题并回答 在数据库中存储数组 JSON 与序列化数组 https stackoverflow com questions
  • QQuickView - 无延迟/滞后地调整内容大小

    图像通常是解释某事的最简单方法 这是我遇到的问题的一个小屏幕截图 如果您查看窗口的右侧 您可以看到内容大小的调整有明显的滞后 延迟 这是一个在很多应用程序中都会发生的问题 但我想知道是否有办法在 Qt 应用程序中使用QQuickView和
  • 无法添加 gms play 服务 9.0.1,google-services 插件需要 9.0.0

    我的顶级 build gradle 中有这个 buildscript repositories jcenter dependencies classpath com google gms google services 3 0 0 allp
  • 从现有组件中创建自定义 Swing 组件

    所以 我有这个 JTexrtArea 几乎可以完美满足我的需求 唯一的问题是行距 我无法设置它 为什么不使用 JTextPane 因为 JTextArea 中的间距可以更改 而且 JTextArea 比 JTextPane 轻得多 而且我的
  • Play!Framework 中的批量 HTTP 请求

    我已经实施了当前的一组路线 例如 GET api version entity my controllers GET api version entity id my controllers POST api version entity
  • 调用/创建委托

    今天是个好日子 我注意到有两种方法可以调用 创建委托 MrDel MyDelegate new MrDel Mathmetics Method or MrDel MyDelegate Mathmetics Method 所以我的问题是这两种
  • 根据背景图像颜色自动对比文本颜色

    我正在寻找一种方法 根据名为 横幅 的 div 中背景图像的主颜色 将文本颜色更改为 000 或 fff 每个页面上的背景图像都是随机选择的 因此我需要能够自动执行此操作 我碰到JavaScript 颜色对比器 https stackove
  • NoReverseMatch django - 不是有效的视图函数或模式

    目前使用 Django 1 11 我得到一个例外 Reverse for book details not found book details is not a valid view function or pattern name Re
  • 按因子分组并返回其他列的第二低值

    我想按中的值对该数据框进行分组zipcode列 并在另一个 称为比率 列中返回second lowest率或lowest率或max rate 例如 从这个 df zipcode state county code name rate are
  • TypeScript 对数组进行排序

    我一直在试图找出我在打字稿中遇到的一个非常奇怪的问题 它将内联布尔表达式视为第一个值的类型 而不是完整的表达式 因此 如果您尝试如下简单的操作 var numericArray Array
  • 派生的 Scala 案例类与基类具有相同的成员变量

    有更好的方法吗 scala gt case class A x Int defined class A scala gt case class B override val x Int y Int extends A x defined c
  • 如何仅解析特定对象而不反序列化整个 JSON 文件?

    我有一个巨大的 JSON 文件 数万个对象 gt 100 MB 文件 我正在尝试解析以提取特定对象 由于文件太大 我尝试仅反序列化我需要的特定部分 如果可能的话 而不必反序列化整个文件 应根据特定属性的值找到所述对象 arena id xx
  • 在 Android Studio 中搜索整个项目中出现的所有字符串

    我刚刚开始使用 Android Studio IntelliJ 现在我正在寻找该功能来查找项目中任何文件中字符串的出现情况 例如 我想找到所有包含字符串 的文件 getUuid 右上角的搜索没有给我正确的结果 并且我认为我无法在 编辑 gt
  • SQL CE 4 System.Transaction 支持

    有人问了类似的问题here https stackoverflow com questions 3401796 does sql ce 4 ctp support ambient transactions using system tran
  • Python 中的反向索引?

    我知道a 结束 开始 1 以相反的顺序对列表进行切片 例如 a range 20 print a 15 10 1 prints 15 11 print a 15 0 1 prints 15 1 但您无法到达第一个元素 示例中为 0 看来 1
  • 将 Eclipse 迁移到缺少 build.gradle 的 Android Studio

    正如许多人所建议的 我正在尝试从 Eclipse 切换到 Android Studio 遵循以下建议https developer android com sdk installing migrate html https develope
  • 如何在 VSIX 项目中的解决方案文件夹中获取项目

    您好 我在 Visual Studio 扩展内的自定义构建任务遇到问题 我需要识别我的自定义项目类型的项目 如果它们位于解决方案的根目录中 我可以很好地做到这一点 但是当它位于解决方案文件夹内时 就会出现问题 我可以将解决方案文件夹作为 E
  • “无法为未命名的组件创建方法”

    以下代码 在包中注册时 为我们提供了一个名为TParentComponent已登记在托盘中Test 但是 当您使用属性编辑器 在同一代码中提供 创建子对象时 IDE 会显示错误消息无法为未命名的组件创建方法 奇怪的是Child对象确实有一个
  • 那是什么('Z' - 'A')

    在Currency java 文件中有一行 private static final int A TO Z Z A 1 这是什么意思 我以前没有看到这个 A TO Z 的值是什么以及为什么它使用 Z 而不是数字 用这个表达你正在治疗char
  • 如何在每个记录器的基础上更改 Python 日志消息的格式?

    读完后文档关于logging http docs python org py3k library logging html module logging 我知道我可以使用这样的代码来执行简单的日志记录 import logging def