一般に、print()を使用して情報を印刷できます。印刷する必要のある情報を階層的に表示し、タイムスタンプを付けてファイルに保存できる場合、printを使用するのは不便です。現在、ロギングライブラリが一般的に使用されています。
1.ログレベルを設定する
まず、次のステートメントをテストします。
import logging # 引入logging模块
logging.debug(u"debug")
logging.info(u"info")
logging.warning(u"warning")
logging.error(u"error")
logging.critical(u"critical")
結果は次のとおりです。
WARNING:root:warning
ERROR:root:error
CRITICAL:root:critical
したがって、ロギングのデフォルトレベルは警告であり、このレベルより下のレベルは出力されないことがわかります。
ログ出力のレベルを次のように設定する方法
import logging # 引入logging模块
logging.basicConfig(level=logging.NOTSET) # 设置日志级别
logging.debug(u"debug")
logging.info(u"info")
logging.warning(u"warning")
logging.error(u"error")
logging.critical(u"critical")
basicConfigのレベルフィールド設定を使用して、次のレベルを設定できます
CRITICAL = 50
FATAL = CRITICAL
ERROR = 40
WARNING = 30
WARN = WARNING
INFO = 20
DEBUG = 10
NOTSET = 0
2.ログの表示形式を設定する
ログに印刷時間を追加したい場合は、ファイルの行数など、設定方法を印刷します。
import logging
if __name__ == '__main__':
logging.basicConfig(level=logging.NOTSET, # 设置日志级别
format="%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
logging.debug(u"debug")
logging.info(u"info")
logging.warning(u"warning")
logging.error(u"error")
logging.critical(u"critical")
入力結果に時間があり、コードファイルと行があることがわかります。
2020-02-16 16:16:43,356 - test.py[line:54] - DEBUG: debug
2020-02-16 16:16:43,356 - test.py[line:55] - INFO: info
2020-02-16 16:16:43,356 - test.py[line:56] - WARNING: warning
2020-02-16 16:16:43,356 - test.py[line:57] - ERROR: error
2020-02-16 16:16:43,356 - test.py[line:58] - CRITICAL: critical
3.ログ出力ファイルを設定します
同様に、ファイルにファイルを出力し、filenameパラメータを使用して次のように保存します。
import logging
if __name__ == '__main__':
logging.basicConfig(level=logging.NOTSET, # 设置日志级别
format="%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s",
filename="test.log", # 指定输出的文件
)
logging.debug(u"debug")
logging.info(u"info")
logging.warning(u"warning")
logging.error(u"error")
logging.critical(u"critical")
この設定の後、ログの内容をtest.logファイルに保存して送信します。リアルタイムでターミナルに表示する方法はありません。ファイルを開くかどうかはログに依存します。ログファイルが保存されていることを確認できますか、ターミナルもリアルタイムで表示されます。
このとき、ロギングのハンドラインターフェースが使用されます。
4.端末とファイルへの同時出力
ここでは、通常、次のように直接公開することなく、getLoggerインターフェースによってインスタンス化されたロギングを使用します
。
import logging
logger = logging.getLogger("") # 实例化logging
logger.debug(u"debug")
logger.info(u"info")
logger.warning(u"warning")
logger.error(u"error")
logger.critical(u"critical")
その後、ハンドラーを使用できます。ハンドラーオブジェクトは、適切なログメッセージ(ログメッセージのログレベルに基づく)を、ファイルや標準出力ストリームなどのハンドラーの指定されたターゲットに配信する役割を果たします。
ロギングには多くのハンドルがあります
logging.StreamHandler # 日志输出到流,可以是 sys.stderr,sys.stdout 或者文件。
logging.FileHandler # 日志输出到文件。
logging.handlers.BaseRotatingHandler # 基本的日志回滚方式。
logging.handlers.RotatingHandler # 日志回滚方式,支持日志文件最大数量和日志文件回滚。
logging.handlers.TimeRotatingHandler # 日志回滚方式,在一定时间区域内回滚日志文件。
logging.handlers.SocketHandler # 远程输出日志到TCP/IP sockets。
logging.handlers.DatagramHandler # 远程输出日志到UDP sockets。
logging.handlers.SMTPHandler # 远程输出日志到邮件地址。
logging.handlers.SysLogHandler # 日志输出到syslog。
logging.handlers.NTEventLogHandler # 远程输出日志到Windows NT/2000/XP的事件日志。
logging.handlers.MemoryHandler # 日志输出到内存中的指定buffer。
logging.handlers.HTTPHandler # 通过”GET”或者”POST”远程输出到HTTP服务器。
logging.NullHandler
ここで使用する必要があるのは、StreamHandlerとFileHandlerです。
次の例:
import logging
logger = logging.getLogger("") # 实例化logging
def logging_init():
# 创建handler
fh = logging.FileHandler/("test.log", encoding="utf-8")
ch = logging.StreamHandler()
# 设置logger日志等级
logger.setLevel(logging.INFO)
# 设置输出日志格式
formatter = logging.Formatter(
fmt="%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s"
)
# 为handler指定输出格式,注意大小写
fh.setFormatter(formatter)
ch.setFormatter(formatter)
# 为logger添加的日志处理器
logger.addHandler(fh)
logger.addHandler(ch)
return True
if __name__ == '__main__':
logging_init()
logger.debug(u"debug")
logger.info(u"info")
logger.warning(u"warning")
logger.error(u"error")
logger.critical(u"critical")
- 通常、最初にFileHandler / StreamHandlerなどの必要なハンドルを作成します
- 次に、setLevel / setFormatterなどのハンドルのプロパティを設定します。
- 最後にaddHandlerを使用して中央プロセッサに追加します
参考資料:
https : //blog.csdn.net/jeffery0207/article/details/95856490
https://www.cnblogs.com/xianyulouie/p/11041777.html