[英]Logging works locally but not on remote
我設置了一個基本的python記錄器,該記錄器可寫入日志文件和stdout。 當我在本地運行python程序時,帶有logging.info
日志消息會按預期出現在文件和控制台中。 但是,當我通過ssh -n user@server python main.py
遠程運行同一程序時,控制台和文件均未顯示任何logging.info
消息。
這是用於設置記錄器的代碼:
def setup_logging(model_type, dataset):
file_name = dataset + "_" + model_type + time.strftime("_%Y%m%d_%H%M")
logging.basicConfig(
level=logging.INFO,
format="[%(levelname)-5.5s %(asctime)s] %(message)s",
datefmt='%H:%M:%S',
handlers=[
logging.FileHandler("log/{0}.log".format(file_name)),
logging.StreamHandler()
])
我已經嘗試了以下操作:
發送消息到logging.warning
:這些消息按預期顯示在root記錄器上。 但是,即使沒有設置記錄器並回退到默認的logging.info
消息也不會顯示。
文件和文件夾權限似乎還不錯,並且在磁盤上創建了一個空文件。
照常使用print
作品
如果查看basicConfig
函數的源代碼 ,您將看到僅在root記錄器上沒有處理程序時才應用該函數:
_acquireLock()
try:
force = kwargs.pop('force', False)
if force:
for h in root.handlers[:]:
root.removeHandler(h)
h.close()
if len(root.handlers) == 0:
handlers = kwargs.pop("handlers", None)
if handlers is None:
...
我認為,您使用的庫之一可配置導入日志記錄。 從上面的示例中可以看到,解決方案之一是使用force=True
參數。
一個可能的缺點是,幾個流行的數據科學庫保留了對其配置的記錄器的引用,因此,當您重新配置日志記錄時,自己的舊記錄器和處理程序仍然存在,並且看不到您的更改。 在這種情況下,您還需要清理這些記錄器的處理程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.