iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python中普通程序员如何了解日志系统
  • 908
分享到

python中普通程序员如何了解日志系统

2023-06-17 00:06:41 908人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章给大家分享的是有关python中普通程序员如何了解日志系统的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。当我们在做系统开发时,日志系统是绕不开的话题。作为日志系统的最终使用者,我们会接触不同的日志系统,比

这篇文章给大家分享的是有关python中普通程序员如何了解日志系统的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

当我们在做系统开发时,日志系统是绕不开的话题。作为日志系统的最终使用者,我们会接触不同的日志系统,比如  log4j、 logback 和 slf4j 等等,还会接触到日志系统的各种概念,比如 FORMatter、Appender 和  Priority 等。这些日志系统有什么区别,这些概念又该怎么理解呢?

今天我们就聊下:我们普通程序员,也就是日志系统最终使用者,可以怎么理解日志系统。

Logging 系统的雏型

让我们回到计算机世界的远古时期或者我们刚刚接触计算机世界的时期,那个时候我们有两种调试程序的办法:1)单步调试,一步步地跟踪,查看代码中变量的值。2) 是 printf 大法 —— 在特定的地方打印日志, 通过日志的输出,帮助快速定位。

单步调试方法费时费力,但能准确定位问题。printf  大法简单粗暴,需要尝试,大部分情况能快速找到问题。单步调试和 printf 方法搭配使用,相得益彰。但是单步调试止步于 gdb 等调试工具,而  printf 大法最终发展出了一系列的日志系统。原因就在于单步调试在程序员调试才能用,而 printf  大法可以在调试和生产线上都能用,并且输出的日志被各方面的人利用和解读。

什么时候打印日志是个问题 —— Level

printf   大法是很简陋的。在调试过程中,有可能日志打到很细粒度,比如每条数据的第三个字段是什么都打印出来了,但是真正运行又要把这些细粒度的日志删除。等到下次调试,我们又要知道每条数据的第三个字段是什么了。为此,我们希望日志打印是智能:调试或者线上出问题的时候,各种细粒度的日志全部打印出来,正常运行的时候输出一些最简单的信息就可以了。

针对这个问题,日志系统引入日志级别(Level)的办法解决。引入日志级别的概念之后,我们编程时打印日志,需要指明这条日志的级别。由于日志级别是最重要的参数,现在的日志系统都是直接通过使用不同的函数来指明级别的,包括   logger.TRACE、logger.DEGUB、logger.INFO、logger.WARN、logger.ERROR、logger.FATAL。其中级别的对比是  TRACE < DEBUG < INFO <WARN < ERROR < FATAL。同时系统运行行,我们将设定  log level设置在某一个级别上,那么级别优先级高的 log  都能打印出来,低的都不能打印出。例如,如果设置优先级为WARN,那么FATAL、ERROR、WARN  级别的log能正常输出,而INFO、DEBUG、TRACE 级别的log则会被忽略。

我们编程时 DEBUG 或者 TRACE  级别打出细粒度的信息,比如每条数据的样子。当我们调试时或者线上有问题时,我们将程序的当前日志级别设置成 TRACE 或者  DEBUG,从而将细粒度的信息打出来。而正常运行时,我们将当前日志级别设置成 INFO 或者 WARN 级别,从而忽略细粒度的信息,降低 IO  操作和提升系统性能。

python中普通程序员如何了解日志系统

打印日志到哪里是还是一个问题 &mdash;&mdash; Appender

有了  Level,我们可以随心意写点 log 了,只要控制好日志级别就行。默认情况下,我们的日志是打印到 Console  里,我们直接人眼看。随着时间的推移,情况变得复杂起来。比如我们需要将日志打入文件里,方便以后查看。即使日志打到文件,我们也需要登录到机器才能查看,我们需要在发生错误时收到邮件或者短信。为了满足这些需求,我们在日志系统中加入  Appender 部件。Appender 部件负责将日志写的不同的目的。

python中普通程序员如何了解日志系统

比如下图就是 Log4j 的日志配置示例。这个示例会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档。

python中普通程序员如何了解日志系统

日志系统可以自定多种   Appender,人们基于这套逻辑发明了一套日志收集和实时检索的系统,也称之为日志系统。在这里为了区别,我们将日志收集和检索系统称之为日志收集检索系统。日志收集检索系统一般有  kafka 流、实时处理组件 spark Streaming 或者 Storm、实时检索系统 elasticsearch  组成。后台系统通过日志系统的 Appender 组件将日志打到 Kafka 流,然后 Spark Streaming 或者 Storm  处理流数据并将之写入 ElasticSearch 检索系统。这样开发和运维就可以在 ElasticSearch 提供的 WEB  查看可视化的日志了。日志收集检索系统的主要好处是,1) 日志集中管理,不需要登录到不同机器;2) 提供可视化的日志查看;3)  提供基于日志的监控、监测服务等。

python中普通程序员如何了解日志系统

目前最有名的日志收集检索系统应该是上图的 Splunk 了。

日志什么样也是个问题 &mdash;&mdash; Formatter

有了日志的  Level 和  Appender,我们还需要解决日志样式的问题。一般情况,我们希望的日志格式包括:Level,函数名,文件名和打日志的代码行数。这可以通过日志系统的  Formatter 组件来实现的。下图是一个 Python 自定义的Formatter。

import logging  def AltCustomFormatter(logging.Formatter):  def __init__(self, fmt=None, datefmt=None):  super(AltCustomFormatter, self).__init__(fmt, datefmt)  def format(self, record):  # 如果你添加了多个handler,你会发现我们的定制消息被重复了多次,  # 我们在record里设置一个marker来避免  if record.levelno > logging.INFO and not hasattr(record, 'is_custom'):  record.msg = "[%s, %s, %s] %s" % (record.filename, record.lineno, record.funcName, record.msg)  record.is_custom = True  return super(AltCustomFormatter, self).format(record)

在引入 Level、Formater 和 Appender 概念之后,整个日志系统的架子算是搭起来了,如下图所示。作为一个普通程序员,可以安心使用这个日志系统了。

python中普通程序员如何了解日志系统

高效地打印日志是另外一个问题 &mdash;&mdash; Efficient

但是作为一个有追求的普通程序,我们想知道大规模系统的极限环境中,日志系统能不能撑得住。答案嘛,是按照上面设计的日志系统是撑不住的。因为大规模系统的极限环境,实时要求高,不能忍受写文件或者写网络的延迟。怎么办呢?有请对付  IO 延迟利器 &mdash;&mdash; Buffer。基于 Buffer,并考虑到 Buffer 所带来的线程同步的问题,  人们设计了下面的方案。在这个方案中,每个线程生成一个 Buffer,然后写线程轮询从 Buffer  读入信息,并写目的地。在这套方案中,写日志并不会导致服务延迟。

python中普通程序员如何了解日志系统

除了架构上的设计,还有一些小  trick 提高性能。比如我们在 log4j 官方 api 查到丑陋的 INFO 函数们。Java 语言不支持不定长参数的情况下,log4j  强行搞一个支持不定长的 INFO 函数,就只能靠着写不同的函数重载,最终也只支持 9 个参数。

python中普通程序员如何了解日志系统

但这些丑陋的  INFO 是有意义的。这些丑陋的 INFO 是为了能够实现下表中不定长参数的方式。这种不定长参数方式相比字符串拼接方式的区别在哪里呢?  当前级别是 ERROR 时,INFO 级别的信息是不用输出的,字符串拼接方式还是要拼字符串,而不定长参数方式就可以不用拼接字符串了。

python中普通程序员如何了解日志系统

感谢各位的阅读!关于“python中普通程序员如何了解日志系统”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: python中普通程序员如何了解日志系统

本文链接: https://www.lsjlt.com/news/286637.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python中普通程序员如何了解日志系统
    这篇文章给大家分享的是有关python中普通程序员如何了解日志系统的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。当我们在做系统开发时,日志系统是绕不开的话题。作为日志系统的最终使用者,我们会接触不同的日志系统,比...
    99+
    2023-06-17
  • ELK日志系统中如何进行通用应用程序日志接入
    这篇文章给大家介绍ELK日志系统中如何进行通用应用程序日志接入,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。日志规范规范的日志存放路径和输出格式将为我们后续的收集和分析带来极大的方便,无需考虑各种不同路径、格式的兼容问...
    99+
    2023-06-19
  • Java程序员必知:如何在Windows系统中管理文件日志?
    在Java应用程序中,日志是非常重要的组成部分。通过记录应用程序的运行状态和异常信息,可以帮助开发者快速定位和解决问题。然而,如果日志文件过大,管理起来就会变得非常困难。本文将介绍如何在Windows系统中使用Java程序管理文件日志。 ...
    99+
    2023-09-24
    windows 文件 日志
  • 如何理解Python日志系统 Eliot
    这篇文章将为大家详细讲解有关如何理解Python日志系统 Eliot,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Eliot 是一个 Python 日志系统,不只是为简单应用程序所设计,更主...
    99+
    2023-06-02
  • Python 中的日志系统:如何记录和管理应用程序的运行日志?
    在开发应用程序时,我们经常需要记录应用程序的运行状态和错误信息,以便于日后排查问题。在 Python 中,可以使用标准库中的 logging 模块来实现日志记录和管理。 本文将介绍 Python 中的日志系统,包括如何创建和配置日志记录器...
    99+
    2023-10-08
    接口 path 日志
  • 如何理解Linux的系统日志
    本篇内容主要讲解“如何理解Linux的系统日志”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解Linux的系统日志”吧!syslogd & klogd   --...
    99+
    2023-06-13
  • 小程序中的Log日志系统该如何搭建和使用
    这篇文章主要为大家分析了小程序中的Log日志系统该如何搭建和使用的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“小程序中的Log日志系统该如何搭建和使用”的知...
    99+
    2023-06-28
  • openSUSE中如何查看系统日志
    在 openSUSE 中,可以使用以下几种方法来查看系统日志: 使用 journalctl 命令:journalctl 是 sys...
    99+
    2024-03-13
    openSUSE
  • 如何理解Linux 系统中的管理日志
    今天就跟大家聊聊有关如何理解Linux 系统中的管理日志,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在 Linux 系统上管理日志文件可能非常容易,也可能非常痛苦。这完全取决于你所...
    99+
    2023-06-05
  • Java 应用程序如何在 Linux 系统上记录日志?
    在 Linux 系统上运行 Java 应用程序时,对于问题排查和性能优化而言,日志记录是至关重要的。本文将介绍如何在 Linux 系统上记录 Java 应用程序的日志,并提供演示代码以帮助您更好地理解。 一、Java 日志框架 Java 日...
    99+
    2023-08-17
    linux 日志 git
  • 如何在Linux系统中安装和配置Python日志?
    在Linux系统中安装和配置Python日志是非常重要的一步,因为日志可以帮助我们记录系统运行的细节,以便在出现问题时快速定位和解决。在本文中,我们将介绍如何在Linux系统中安装和配置Python日志。 第一步是安装Python。Linu...
    99+
    2023-08-23
    日志 npm linux
  • 分布式系统中如何优化 Python 日志性能?
    在分布式系统中,日志记录是非常重要的,它可以帮助我们了解系统的运行情况,以便及时发现和解决问题。然而,日志记录也会对系统的性能产生一定的影响,特别是在分布式系统中。在本文中,我们将探讨如何优化 Python 日志性能以提高分布式系统的效率...
    99+
    2023-07-22
    日志 分布式 函数
  • 如何在ArchLinux中查看系统日志
    在ArchLinux中,可以通过以下几种方法查看系统日志: 使用journalctl命令查看系统日志: journalctl ...
    99+
    2024-03-13
    ArchLinux
  • linux系统普通用户密码过期如何解决
    本篇文章为大家展示了linux系统普通用户密码过期如何解决,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。什么是Linux系统Linux是一种免费使用和自由传播的类UNIX操作系统,是一个基于POSI...
    99+
    2023-06-13
  • 如何在Windows操作系统中使用Java编写文件日志程序?
    在Windows操作系统中,Java是一种非常流行的编程语言,它不仅可以用于开发各种类型的应用程序,还可以用于编写文件日志程序。在本文中,我们将介绍如何在Windows操作系统中使用Java编写文件日志程序。 一、什么是文件日志程序 文件日...
    99+
    2023-09-24
    windows 文件 日志
  • 麒麟操作系统中的系统日志如何帮助你了解电脑运行情况
    麒麟操作系统中的系统日志可以帮助你了解电脑的运行情况。系统日志记录了操作系统和应用程序的活动、错误和警告信息,以及硬件设备的状态和事...
    99+
    2023-10-12
    麒麟操作系统
  • Linux系统中普通用户如何切换root方法
    这篇文章主要为大家分析了Linux系统中普通用户如何切换root方法的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“Linux系统中普通用户如何切换root方...
    99+
    2023-06-28
  • 如何在Linux系统中通过PHP脚本实现日志分析
    引言:日志分析对于网站运营和系统管理来说是非常重要的一项任务。通过对日志进行分析,我们可以了解用户行为、网站访问情况以及系统运行状态等信息,从而为网站优化和系统调整提供依据。在Linux系统中,可以使用PHP脚本来实现日志分析,并根据具体需...
    99+
    2023-10-21
    Linux系统 日志分析 关键词: PHP脚本
  • 如何用Python编写高效的日志系统?
    日志系统是一个可追溯和可调试的重要工具,它记录了应用程序的运行状态,异常、错误等信息。在开发和维护大型应用程序时,日志系统是必不可少的。Python作为一种流行的编程语言,具有强大的日志工具,可以为开发人员提供丰富的日志记录功能。 本文将...
    99+
    2023-11-03
    日志 django 编程算法
  • Linux系统中如何进行日志查看
    小编今天带大家了解Linux系统中如何进行日志查看,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“Linux系统中如何进行日志查看”的...
    99+
    2023-06-28
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作