loggingを利用する.basicConfig生成ファイル--中国語の文字化けし解決方法

4915 ワード

目次
  • loggingモジュール
  • なぜloggingモジュール
  • を使用するのか
  • loggingモジュール
  • の使用方法
  • loggingモジュールを使用してログファイルを書く方法
  • loggerオブジェクト
  • を利用する.
  • はloggingを利用する.基本構成


  • loggingモジュール
    loggingモジュールはPythonに内蔵標準モジュールで、主に実行ログを出力するloggingは情報の出力位置を設定し、どのように出力するかに用いられる.出力ログのレベル、保存パス、ログファイルのロールバックなどを設定できます.異なるログ・レベルを設定することで、releaseバージョンで重要な情報のみを出力し、大量のデバッグ情報を表示する必要はありません.
    なぜloggingモジュールを使用するのか
    プログラムの実行中に、重要なデータ情報が発生するのは避けられない.ユーザに見せることができるものもあれば、後で最適化システムをデバッグする際の重要な参考として、黙って収集する必要があるものもある.煩雑なログの読み書きを処理し、Pythonはすでに便利なモジュールloggingを提供しています.
    loggingモジュールの使用方法
    モジュールのインポート
    import logging
    

    loggingモジュールは非常に豊富な機能を提供しています(ここでは本人がよく使う機能だけを紹介します)
    loggingモジュールの使用方法の簡単な例
    import logging
    logging.basicConfig(level=logging.DEBUG,
                       format="%(asctime)s\t"
                       "%(filename)s\t"
                       "[line:%(lineno)d]\t"
                       "%(levelname)s
    " "%(message)s", datefmt="%a, %d %b %Y %H:%M:%S" ) logging.debug(" ") logging.info(" ") logging.warning(" ") logging.error(" ") logging.critical(" ")

    機能及びパラメータ解析
          
    logging.basicConfig(
    
            
    filename="filename"
    
               , 'w'  'a'
    filemode="w"   "a"
    
              
    format="     "
    
    Textual time when the LogRecord was created
              
    "%(asctime)s"
    
    Numeric logging level for the message (DEBUG, INFO, WARNING, ERROR, CRITICAL)
             
    %(levelno)s
    
    Text logging level for the message ("DEBUG", "INFO",  "WARNING", "ERROR", "CRITICAL")
             
    %(levelname)s
    
    Full pathname of the source file where the logging call was issued (if available)
               ,     sys.argv[0]
    %(pathname)s:
    
    Filename portion of pathname
             
    %(filename)s
    
    Function name
             
    %(funcName)s
    
    Source line number where the logging call was issued (if available)
             
    %(lineno)d
    
    The result of record.getMessage(), computed just as the record is emitted
          
    %(message)s
    
    Thread ID (if available)
        ID
    %(thread)d
    
    Thread name (if available)
          
    %(threadName)s
    
    Process ID (if available)
        ID
    %(process)d
    
    Use the specified date/time format
           /    
    %a :      %d :      %b :      %Y :  (XXXX)    %H :      %M :      %S :  
    datefmt="%a, %d %b %Y %H:%M:%S"
    )
    

    loggingモジュールを使用してログファイルを書く方法
    当分、書類の書き方は2つしか把握していません
    loggerオブジェクトの使用
    import logging
    logger = logging.getLogger()  #      logger  
    logger.setLevel(logging.INFO)  #         
    
    #         
    file_handle = logging.FileHandler("log", encoding="UTF-8")
    
    #        
    stream_handle = logging.StreamHandler()
    
    #         
    fmt = logging.Formatter(f"{'*'*28}
    " "> %(asctime)s
    " "> %(levelname)s - " "%(filename)s - " "[line:%(lineno)d]
    " f"{'-'*40}
    " " %(message)s
    " f"{'-'*40}

    ", datefmt="%a, %d %b %Y" "%H:%M:%S" ) file_handle.setFormatter(fmt) # # stream_handle.setFormatter(fmt) # logger.addHandler(file_handle) # logger # logger.addHandler(stream_handle) # logger logger.info(" ")

    loggingを利用する.基本構成
    この方法でログをファイルに書き込むのは通常中国語が文字化けして表示されることをサポートしていません.ネット上には多くの処理方法がありますが、なぜ私たちは最初から中国語の文字化けして問題を解決しないのでしょうか.ここで私の解決方法を共有します.
    import logging
    file = open("log", encoding="utf-8", mode="a")
    logging.basicConfig(level=logging.DEBUG,
                        stream=file,
                        format="%(asctime)s "
                               "%(filename)s [line:%(lineno)d] "
                               "%(levelname)s
    " "%(message)s", datefmt="%a, %d %b %Y %H:%M:%S" ) logging.debug(" ") logging.info(" ") logging.warning(" ") logging.error(" ") logging.critical(" ") file.close()

    stream:sysへの出力を指定できるログの出力ストリーム.stderr, sys.stdoutまたはファイル、デフォルトはsysに出力.stderr、streamとfilenameが同時に指定されている場合、streamはstreamを使用してファイルに出力することを無視されて符号化の問題を解決することができますが、これによっていくつかの問題が発生します.まず、ファイルはプログラムの実行中に常に開いている必要があります.次に、ファイルとコンソールの出力を同時に行うことはできません.
    以上の未来の学习の仕事の中でもっと良い解决措置が戻って穴を埋めます...
    転載先:https://www.cnblogs.com/dmcs95/p/10660372.html