Inhaltsverzeichnis
1. Protokollierung bei niedriger Konfiguration
1.v1
Heim Backend-Entwicklung Python-Tutorial So verwenden Sie das Protokollierungsmodul in Python

So verwenden Sie das Protokollierungsmodul in Python

May 12, 2023 pm 06:10 PM
python logging

    1. Protokollierung bei niedriger Konfiguration

    Die Protokolle sind in die folgenden fünf Ebenen unterteilt: Debug-->Info-->Warnung-->Fehler-- >kritisch, die niedrigste Standardstufe ist die Warnstufe.

    1.v1

    import logging
    
    logging.debug('调试信息')
    logging.info('正常信息')
    logging.warning('警告信息')
    logging.error('报错信息')
    logging.critical('严重错误信息')
    Nach dem Login kopieren

    WARNUNG: root: Warnmeldung
    KRITISCH: root: schwerwiegende Fehlermeldung

    v1-Version kann die Protokollebene nicht angeben; kann nur gehen zum Siebdruck, Schreiben in Datei nicht möglich. Daher kann es in den folgenden Code geändert werden.

    2.v2

    import logging
    
    # 日志的基本配置
    
    logging.basicConfig(filename='access.log',
                        format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
                        datefmt='%Y-%m-%d %H:%M:%S %p',
                        level=10)
    
    logging.debug('调试信息')  # 10
    logging.info('正常信息')  # 20
    logging.warning('警告信息')  # 30
    logging.error('报错信息')  # 40
    logging.critical('严重错误信息')  # 50
    Nach dem Login kopieren

    Sie können das Standardverhalten des Protokollierungsmoduls durch bestimmte Parameter in der Funktion logging.basicConfig() ändern. Die verfügbaren Parameter sind:

    • Dateiname: Erstellen Sie einen FiledHandler mit dem angegebenen Dateinamen (. wird später ausführlich erläutert (Handlerkonzept), sodass das Protokoll in der angegebenen Datei gespeichert wird.

    • Dateimodus: Dateiöffnungsmodus. Dieser Parameter wird verwendet, wenn der Dateiname angegeben ist. Der Standardwert ist „a“ und kann auch als „w“ angegeben werden.

    • Format: Geben Sie das vom Handler verwendete Protokollanzeigeformat an.

    • datefmt: Datums- und Uhrzeitformat angeben.

    • level: Legen Sie die Protokollebene des Rootloggers fest (das spezifische Konzept wird später erläutert)

    • stream: Erstellen Sie einen StreamHandler mit dem angegebenen Stream. Sie können die Ausgabe in sys.stderr, sys.stdout oder einer Datei angeben. Der Standardwert ist sys.stderr. Wenn sowohl Dateiname als auch Stream-Parameter aufgeführt sind, wird der Stream-Parameter ignoriert.

    Formatzeichenfolgen, die im Formatparameter verwendet werden können:

    • %(name)s Name des Loggers

    • %(levelno)s Protokollebene in numerischer Form

    • %(levelname)s Protokoll Ebene in Textform

    • %(Pfadname)s Der vollständige Pfadname des Moduls, das die Protokollausgabefunktion aufruft, lautet möglicherweise nicht

    • %(Dateiname)s Der Dateiname des Moduls, das die Protokollausgabefunktion aufruft

    • % (module)s Der Modulname, der die Protokollausgabefunktion aufruft

    • %(funcName)s Der Funktionsname, der die Protokollausgabefunktion aufruft

    • %(lineno)d Die Codezeile, in der Die Anweisung, die die Protokollausgabefunktion aufruft, befindet sich der Logger wurde erstellt

    • %(asctime)s Zeichen Die aktuelle Zeit als String. Das Standardformat ist „2003-07-08 16:49:45,896“. Was auf das Komma folgt, sind Millisekunden

    • %(thread)d Thread-ID. Möglicherweise sind keine

    • %(threadName)s Thread-Namen vorhanden. Möglicherweise ist keine

    • %(process)d-Prozess-ID vorhanden. Möglicherweise werden vom Benutzer keine

    • %(message)s-Nachrichten ausgegeben. Version 2 kann keine Zeichenkodierung angeben; sie kann nur in eine Datei gedruckt werden.

      3.v3
    • Das Protokollierungsmodul enthält vier Rollen: Logger, Filter, Formatter-Objekt, Handler.

    • Logger: ein Objekt, das Protokolle generiert.

    Filter: ein Objekt, das Protokolle filtert. Formatter-Objekt : ja Passen Sie verschiedene Protokollformatobjekte an und binden Sie sie dann an verschiedene Handler-Objekte, um die Protokollformate verschiedener Handler zu steuern

    Handler: Protokolle empfangen und das Drucken an verschiedene Orte steuern, FileHandler wird zum Drucken in Dateien verwendet, StreamHandler wird verwendet zum Drucken auf dem Terminal

      '''
      critical=50
      error =40
      warning =30
      info = 20
      debug =10
      '''
      
      
      import logging
      
      # 1、logger对象:负责产生日志,然后交给Filter过滤,然后交给不同的Handler输出
      logger = logging.getLogger(__file__)
      
      # 2、Filter对象:不常用,略
      
      # 3、Handler对象:接收logger传来的日志,然后控制输出
      h2 = logging.FileHandler('t1.log')  # 打印到文件
      h3 = logging.FileHandler('t2.log')  # 打印到文件
      sm = logging.StreamHandler()  # 打印到终端
      
      # 4、Formatter对象:日志格式
      formmater1 = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s',
                                     datefmt='%Y-%m-%d %H:%M:%S %p',)
      
      formmater2 = logging.Formatter('%(asctime)s :  %(message)s',
                                     datefmt='%Y-%m-%d %H:%M:%S %p',)
      
      formmater3 = logging.Formatter('%(name)s %(message)s',)
      
      
      # 5、为Handler对象绑定格式
      h2.setFormatter(formmater1)
      h3.setFormatter(formmater2)
      sm.setFormatter(formmater3)
      
      # 6、将Handler添加给logger并设置日志级别
      logger.addHandler(h2)
      logger.addHandler(h3)
      logger.addHandler(sm)
      
      # 设置日志级别,可以在两个关卡进行设置logger与handler
      # logger是第一级过滤,然后才能到handler
      logger.setLevel(30)
      h2.setLevel(10)
      h3.setLevel(10)
      sm.setLevel(10)
      
      # 7、测试
      logger.debug('debug')
      logger.info('info')
      logger.warning('warning')
      logger.error('error')
      logger.critical('critical')
      Nach dem Login kopieren
    • 2. High-End-Protokollierung

      1. Konfigurieren Sie die Protokolldatei
    • Die oben genannten drei Protokollversionen dienen nur dazu, zu unserer folgenden Protokollkonfigurationsdatei zu führen

      import os
      import logging.config
      
      # 定义三种日志输出格式 开始
      standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
                        '[%(levelname)s][%(message)s]'  # 其中name为getLogger()指定的名字;lineno为调用日志输出函数的语句所在的代码行
      simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
      id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'
      # 定义日志输出格式 结束
      
      logfile_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))  # log文件的目录,需要自定义文件路径 # atm
      logfile_dir = os.path.join(logfile_dir, 'log')  # C:\Users\oldboy\Desktop\atm\log
      
      logfile_name = 'log.log'  # log文件名,需要自定义路径名
      
      # 如果不存在定义的日志目录就创建一个
      if not os.path.isdir(logfile_dir):  # C:\Users\oldboy\Desktop\atm\log
          os.mkdir(logfile_dir)
      
      # log文件的全路径
      logfile_path = os.path.join(logfile_dir, logfile_name)  # C:\Users\oldboy\Desktop\atm\log\log.log
      # 定义日志路径 结束
      
      # log配置字典
      LOGGING_DIC = {
          'version': 1,
          'disable_existing_loggers': False,
          'formatters': {
              'standard': {
                  'format': standard_format
              },
              'simple': {
                  'format': simple_format
              },
          },
          'filters': {},  # filter可以不定义
          'handlers': {
              # 打印到终端的日志
              'console': {
                  'level': 'DEBUG',
                  'class': 'logging.StreamHandler',  # 打印到屏幕
                  'formatter': 'simple'
              },
              # 打印到文件的日志,收集info及以上的日志
              'default': {
                  'level': 'INFO',
                  'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件
                  'formatter': 'standard',
                  'filename': logfile_path,  # 日志文件
                  'maxBytes': 1024 * 1024 * 5,  # 日志大小 5M  (*****)
                  'backupCount': 5,
                  'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
              },
          },
          'loggers': {
              # logging.getLogger(__name__)拿到的logger配置。如果''设置为固定值logger1,则下次导入必须设置成logging.getLogger('logger1')
              '': {
                  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
                  'handlers': ['default', 'console'],
                  'level': 'DEBUG',
                  'propagate': False,  # 向上(更高level的logger)传递
              },
          },
      }
      
      
      
      def load_my_logging_cfg():
          logging.config.dictConfig(LOGGING_DIC)  # 导入上面定义的logging配置
          logger = logging.getLogger(__name__)  # 生成一个log实例
          logger.info('It works!')  # 记录该文件的运行状态
          
          return logger
      
      
      if __name__ == '__main__':
          load_my_logging_cfg()
      Nach dem Login kopieren

      2
      import time
      import logging
      import my_logging  # 导入自定义的logging配置
      
      logger = logging.getLogger(__name__)  # 生成logger实例
      
      
      def demo():
          logger.debug("start range... time:{}".format(time.time()))
          logger.info("中文测试开始。。。")
          for i in range(10):
              logger.debug("i:{}".format(i))
              time.sleep(0.2)
          else:
              logger.debug("over range... time:{}".format(time.time()))
          logger.info("中文测试结束。。。")
      
      
      if __name__ == "__main__":
          my_logging.load_my_logging_cfg()  # 在你程序文件的入口加载自定义logging配置
          demo()
      Nach dem Login kopieren
    • 3. Django-Protokollkonfigurationsdatei
    • # logging_config.py
      # 学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441
      LOGGING = {
          'version': 1,
          'disable_existing_loggers': False,
          'formatters': {
              'standard': {
                  'format': '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]'
                            '[%(levelname)s][%(message)s]'
              },
              'simple': {
                  'format': '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
              },
              'collect': {
                  'format': '%(message)s'
              }
          },
          'filters': {
              'require_debug_true': {
                  '()': 'django.utils.log.RequireDebugTrue',
              },
          },
          'handlers': {
              # 打印到终端的日志
              'console': {
                  'level': 'DEBUG',
                  'filters': ['require_debug_true'],
                  'class': 'logging.StreamHandler',
                  'formatter': 'simple'
              },
              # 打印到文件的日志,收集info及以上的日志
              'default': {
                  'level': 'INFO',
                  'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件,自动切
                  'filename': os.path.join(BASE_LOG_DIR, "xxx_info.log"),  # 日志文件
                  'maxBytes': 1024 * 1024 * 5,  # 日志大小 5M
                  'backupCount': 3,
                  'formatter': 'standard',
                  'encoding': 'utf-8',
              },
              # 打印到文件的日志:收集错误及以上的日志
              'error': {
                  'level': 'ERROR',
                  'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件,自动切
                  'filename': os.path.join(BASE_LOG_DIR, "xxx_err.log"),  # 日志文件
                  'maxBytes': 1024 * 1024 * 5,  # 日志大小 5M
                  'backupCount': 5,
                  'formatter': 'standard',
                  'encoding': 'utf-8',
              },
              # 打印到文件的日志
              'collect': {
                  'level': 'INFO',
                  'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件,自动切
                  'filename': os.path.join(BASE_LOG_DIR, "xxx_collect.log"),
                  'maxBytes': 1024 * 1024 * 5,  # 日志大小 5M
                  'backupCount': 5,
                  'formatter': 'collect',
                  'encoding': "utf-8"
              }
          },
          'loggers': {
              # logging.getLogger(__name__)拿到的logger配置
              '': {
                  'handlers': ['default', 'console', 'error'],
                  'level': 'DEBUG',
                  'propagate': True,
              },
              # logging.getLogger('collect')拿到的logger配置
              'collect': {
                  'handlers': ['console', 'collect'],
                  'level': 'INFO',
              }
          },
      }
      
      
      # -----------
      # 用法:拿到俩个logger
      
      logger = logging.getLogger(__name__)  # 线上正常的日志
      collect_logger = logging.getLogger("collect")  # 领导说,需要为领导们单独定制领导们看的日志
      Nach dem Login kopieren

      Das obige ist der detaillierte Inhalt vonSo verwenden Sie das Protokollierungsmodul in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

    Heiße KI -Werkzeuge

    Undresser.AI Undress

    Undresser.AI Undress

    KI-gestützte App zum Erstellen realistischer Aktfotos

    AI Clothes Remover

    AI Clothes Remover

    Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

    Undress AI Tool

    Undress AI Tool

    Ausziehbilder kostenlos

    Clothoff.io

    Clothoff.io

    KI-Kleiderentferner

    Video Face Swap

    Video Face Swap

    Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

    Heiße Werkzeuge

    Notepad++7.3.1

    Notepad++7.3.1

    Einfach zu bedienender und kostenloser Code-Editor

    SublimeText3 chinesische Version

    SublimeText3 chinesische Version

    Chinesische Version, sehr einfach zu bedienen

    Senden Sie Studio 13.0.1

    Senden Sie Studio 13.0.1

    Leistungsstarke integrierte PHP-Entwicklungsumgebung

    Dreamweaver CS6

    Dreamweaver CS6

    Visuelle Webentwicklungstools

    SublimeText3 Mac-Version

    SublimeText3 Mac-Version

    Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

    PHP und Python: Verschiedene Paradigmen erklärt PHP und Python: Verschiedene Paradigmen erklärt Apr 18, 2025 am 12:26 AM

    PHP ist hauptsächlich prozedurale Programmierung, unterstützt aber auch die objektorientierte Programmierung (OOP). Python unterstützt eine Vielzahl von Paradigmen, einschließlich OOP, funktionaler und prozeduraler Programmierung. PHP ist für die Webentwicklung geeignet, und Python eignet sich für eine Vielzahl von Anwendungen wie Datenanalyse und maschinelles Lernen.

    Wählen Sie zwischen PHP und Python: Ein Leitfaden Wählen Sie zwischen PHP und Python: Ein Leitfaden Apr 18, 2025 am 12:24 AM

    PHP eignet sich für Webentwicklung und schnelles Prototyping, und Python eignet sich für Datenwissenschaft und maschinelles Lernen. 1.PHP wird für die dynamische Webentwicklung verwendet, mit einfacher Syntax und für schnelle Entwicklung geeignet. 2. Python hat eine kurze Syntax, ist für mehrere Felder geeignet und ein starkes Bibliotheksökosystem.

    Python vs. JavaScript: Die Lernkurve und Benutzerfreundlichkeit Python vs. JavaScript: Die Lernkurve und Benutzerfreundlichkeit Apr 16, 2025 am 12:12 AM

    Python eignet sich besser für Anfänger mit einer reibungslosen Lernkurve und einer kurzen Syntax. JavaScript ist für die Front-End-Entwicklung mit einer steilen Lernkurve und einer flexiblen Syntax geeignet. 1. Python-Syntax ist intuitiv und für die Entwicklung von Datenwissenschaften und Back-End-Entwicklung geeignet. 2. JavaScript ist flexibel und in Front-End- und serverseitiger Programmierung weit verbreitet.

    So führen Sie Programme in der terminalen VSCODE aus So führen Sie Programme in der terminalen VSCODE aus Apr 15, 2025 pm 06:42 PM

    Im VS -Code können Sie das Programm im Terminal in den folgenden Schritten ausführen: Erstellen Sie den Code und öffnen Sie das integrierte Terminal, um sicherzustellen, dass das Codeverzeichnis mit dem Terminal Working -Verzeichnis übereinstimmt. Wählen Sie den Befehl aus, den Befehl ausführen, gemäß der Programmiersprache (z. B. Pythons Python your_file_name.py), um zu überprüfen, ob er erfolgreich ausgeführt wird, und Fehler auflösen. Verwenden Sie den Debugger, um die Debugging -Effizienz zu verbessern.

    Kann gegen Code in Windows 8 ausgeführt werden Kann gegen Code in Windows 8 ausgeführt werden Apr 15, 2025 pm 07:24 PM

    VS -Code kann unter Windows 8 ausgeführt werden, aber die Erfahrung ist möglicherweise nicht großartig. Stellen Sie zunächst sicher, dass das System auf den neuesten Patch aktualisiert wurde, und laden Sie dann das VS -Code -Installationspaket herunter, das der Systemarchitektur entspricht und sie wie aufgefordert installiert. Beachten Sie nach der Installation, dass einige Erweiterungen möglicherweise mit Windows 8 nicht kompatibel sind und nach alternativen Erweiterungen suchen oder neuere Windows -Systeme in einer virtuellen Maschine verwenden müssen. Installieren Sie die erforderlichen Erweiterungen, um zu überprüfen, ob sie ordnungsgemäß funktionieren. Obwohl VS -Code unter Windows 8 möglich ist, wird empfohlen, auf ein neueres Windows -System zu upgraden, um eine bessere Entwicklungserfahrung und Sicherheit zu erzielen.

    Ist die VSCODE -Erweiterung bösartig? Ist die VSCODE -Erweiterung bösartig? Apr 15, 2025 pm 07:57 PM

    VS -Code -Erweiterungen stellen böswillige Risiken dar, wie das Verstecken von böswilligem Code, das Ausbeutetieren von Schwachstellen und das Masturbieren als legitime Erweiterungen. Zu den Methoden zur Identifizierung böswilliger Erweiterungen gehören: Überprüfung von Verlegern, Lesen von Kommentaren, Überprüfung von Code und Installation mit Vorsicht. Zu den Sicherheitsmaßnahmen gehören auch: Sicherheitsbewusstsein, gute Gewohnheiten, regelmäßige Updates und Antivirensoftware.

    Kann Visual Studio -Code in Python verwendet werden Kann Visual Studio -Code in Python verwendet werden Apr 15, 2025 pm 08:18 PM

    VS -Code kann zum Schreiben von Python verwendet werden und bietet viele Funktionen, die es zu einem idealen Werkzeug für die Entwicklung von Python -Anwendungen machen. Sie ermöglichen es Benutzern: Installation von Python -Erweiterungen, um Funktionen wie Code -Abschluss, Syntax -Hervorhebung und Debugging zu erhalten. Verwenden Sie den Debugger, um Code Schritt für Schritt zu verfolgen, Fehler zu finden und zu beheben. Integrieren Sie Git für die Versionskontrolle. Verwenden Sie Tools für die Codeformatierung, um die Codekonsistenz aufrechtzuerhalten. Verwenden Sie das Lining -Tool, um potenzielle Probleme im Voraus zu erkennen.

    PHP und Python: Ein tiefes Eintauchen in ihre Geschichte PHP und Python: Ein tiefes Eintauchen in ihre Geschichte Apr 18, 2025 am 12:25 AM

    PHP entstand 1994 und wurde von Rasmuslerdorf entwickelt. Es wurde ursprünglich verwendet, um Website-Besucher zu verfolgen und sich nach und nach zu einer serverseitigen Skriptsprache entwickelt und in der Webentwicklung häufig verwendet. Python wurde Ende der 1980er Jahre von Guidovan Rossum entwickelt und erstmals 1991 veröffentlicht. Es betont die Lesbarkeit und Einfachheit der Code und ist für wissenschaftliche Computer, Datenanalysen und andere Bereiche geeignet.

    See all articles