[英]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")
但是,我在以下三點上苦苦掙扎。
我假設使用 sysout 配置,“日志測試”字符串位於系統中的某個位置。 我怎樣才能訪問它?
如何顯示生成它的時間戳和腳本? 這就是 my.log 文件當前的樣子。
我嘗試使用您的代碼進行重現(僅更改了日志文件的路徑)。
- 我假設使用 sysout 配置,“日志測試”字符串位於系統中的某個位置。 我怎樣才能訪問它?
sys.stdout
stream 是標准的 output。 如果沒有發生重定向,它指向啟動腳本的終端(Windows 控制台)。 在 Windows 中,如果腳本是從 GUI 進程(例如 pyw.exe)啟動的,則 stdout 是NUL:
特殊文件,因此在那里寫入的所有內容都會消失。
- 如何顯示生成它的時間戳和腳本?...
我無法重現您的 output。 我的logger.log
文件包含:
[2021-03-18 14:19:20,603] {ess2.py:14} INFO - Log Test
- 如果我嘗試刪除一個 .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.