簡體   English   中英

python:將輸出從外部API記錄到記錄器模塊

[英]python: logging output from external API to logger module

我是python初學者。 我的python腳本使用基本的python日志記錄模塊將輸出記錄到文件(例如example.log)中。 但是,我的python腳本還進行了一些我無法控制的第三方API調用(例如parse_the_file)。 我想將API產生的輸出(通常在控制台上)捕獲到example.log中。 以下示例代碼部分起作用,但是問題是,一旦我開始將API輸出記錄到日志文件中,內容就會被覆蓋。

#!/usr/bin/env python

import logging
import sys
import os
from common_lib import *     # import additional modules

logging.basicConfig(filename='example.log', filemode='w', level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')

logging.debug('This is a log message.') # message goes to log file.

sys.stdout = open('example.log','a')
metadata_func=parse_the_file('/opt/metadata.txt') # output goes to log file but OVERWRITES the content
sys.stdout = sys.__stdout__
logging.debug('This is a second log message.') # message goes to log file.

我知道這個網站上有過類似問題的建議,但我沒有針對該問題的解決方法/解決方案,在這種情況下將無法解決。

嘗試:

log_file = open('example.log', 'a')
logging.basicConfig(stream=log_file, level=logging.DEBUG)
logging.debug("Test")
sys.stdout = log_file
sys.stderr = log_file
stdout_fd = os.dup(1)
stderr_fd = os.dup(2)
os.dup2(log_file.fileno(), 1)
os.dup2(log_file.fileno(), 2)

os.system("echo foo")

os.dup2(stdout_fd, 1)
os.dup2(stderr_fd, 2)
sys.stdout = sys.__stdout__
sys.stderr = sys.__stderr__

但是,這不會相應地格式化它。 如果需要,您可以嘗試使用類似http://plumberjack.blogspot.com/2009/09/how-to-treat-logger-like-output-stream.html的方法

暫無
暫無

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

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