簡體   English   中英

日志在本地工作,但不在遠程工作

[英]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.

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