簡體   English   中英

Python 記錄儀顯示信息

[英]Python Logger display information

我正在嘗試通過以下代碼使用 python 中的記錄器庫:

import logging
import sys

file_handler = logging.FileHandler(filename=r'\\Folder01\Deployment\Folder\logger\logger.log')
stdout_handler = logging.StreamHandler(sys.stdout)
handlers = [file_handler, stdout_handler]

logging.basicConfig(
    level=logging.DEBUG, 
    format='[%(asctime)s] {%(filename)s:%(lineno)d} %(levelname)s - %(message)s',
    handlers=handlers
)

logging.info("Log Test") 

但是,我在以下三點上苦苦掙扎。

  1. 我假設使用 sysout 配置,“日志測試”字符串位於系統中的某個位置。 我怎樣才能訪問它?

  2. 如何顯示生成它的時間戳和腳本? 這就是 my.log 文件當前的樣子。

在此處輸入圖像描述

  1. 如果我嘗試刪除 a.log 文件,它不會允許我,因為 python 已打開它(即使在執行之后)。 對於自動關閉其他類型的文件,可以選擇使用 open(...) as file:... 這里有同樣的可能性嗎?

在此處輸入圖像描述

我嘗試使用您的代碼進行重現(僅更改了日志文件的路徑)。

  1. 我假設使用 sysout 配置,“日志測試”字符串位於系統中的某個位置。 我怎樣才能訪問它?

sys.stdout stream 是標准的 output。 如果沒有發生重定向,它指向啟動腳本的終端(Windows 控制台)。 在 Windows 中,如果腳本是從 GUI 進程(例如 pyw.exe)啟動的,則 stdout 是NUL:特殊文件,因此在那里寫入的所有內容都會消失。

  1. 如何顯示生成它的時間戳和腳本?...

我無法重現您的 output。 我的logger.log文件包含:

[2021-03-18 14:19:20,603] {ess2.py:14} INFO - Log Test
  1. 如果我嘗試刪除一個 .log 文件,它不會允許我,因為 python 已打開它...

這是一個 Windows 的東西。 默認情況下,在一個進程中打開的文件不能從另一個進程中刪除或以寫入模式打開。 唯一的方法是將特殊選項傳遞給CreateFile function。 幾乎無能為力,因為 FileHandler 始終保持其文件處於打開狀態。

但是,如果您的性能要求允許,則可以輕松構建一個自定義處理程序,該處理程序將在每條消息后關閉文件。 您可以知道為每條消息打開和關閉文件的開銷是否可以接受,我不能。

但是這里有一個可能的代碼(應該實現模式和編碼參數):

class SpecialHandler(logging.Handler):
    def __init__(self, filename):
        super().__init__()
        self.filename = filename

    def close(self):
        self.filename = None
        super().close()

    def emit(self, record):
        if self.filename is not None:
            with open(self.filename, 'a') as out:
                _ = out.write(self.format(record) + '\n')

如果您使用它而不是普通的 FileHandler,您將能夠在 2 條消息之間刪除文件:

file_handler = SpecialHandler(filename=r'\\Folder01\Deployment\Folder\logger\logger.log')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM