簡體   English   中英

"使用 python 3.3.4 和 RotatingFileHandler 時出現 PermissionError"

[英]PermissionError when using python 3.3.4 and RotatingFileHandler

我正在嘗試為我正在使用 python 3.3.4 和 PyQt4 編寫的 GUI 應用程序獲取旋轉日志文件。

我的主腳本中有以下代碼片段:

import logging
import resources

logger = logging.getLogger('main.test')

def main():
    logger.setLevel(logging.DEBUG)

    fh = RotatingFileHandler(resources.LOG_FILE_PATH, maxBytes=500, backupCount=5)
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    fh.setFormatter(formatter)

    logger.addHandler(fh)
    logger.info('main')

您可以直接在 basicConfig() 中指定處理程序,而不是向記錄器對象添加處理程序。 如果將 RotatingFileHandler 添加到記錄器對象,則一個對象可能會打開日志文件,同時另一個對象可能會嘗試重命名它,從而引發 PermissionError。

下面的代碼似乎工作得很好。

import logging
import resources
from logging.handlers import RotatingFileHandler

logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', handlers=[RotatingFileHandler(filename=resources.LOG_FILE_PATH, maxBytes=500, backupCount=5)])
logger = logging.getLogger('main.test')

def main():
    logger.setLevel(logging.DEBUG)
    logger.info('main')

花了半天時間,因為以前的答案解決了我的問題。

我的工作解決方案是使用https://pypi.org/project/concurrent-log-handler/而不是 RotatingFileHandler。 在 Flask 應用程序等多線程場景中,當我們旋轉達到最大大小的日志文件時,將引發 PermissionError。

安裝pypiwin32以擺脫No Module name win32con錯誤。

感謝訪問https://www.programmersought.com/article/43941158027/

您不能在 basicConfig() 和 RotatingFileHandler() 中指定相同的文件名。 我遇到了同樣的問題,我從 basicConfig() 中刪除了文件名參數,現在它可以工作了。

檢查文件沒有被例如 Windows 文件索引、防病毒軟件或其他軟件保持打開狀態。 無法重命名打開的文件。

我將應用程序更改為使用 dictConfig 並創建了一個單獨的文件來保存字典配置。 在我的主要應用程序的頂部,我有:

from log.logger import LOGGING

logging.config.dictConfig(LOGGING)
logger = logging.getLogger('testlogging')

然后在log.logger我有:

import logging
import sys
import resources

LOGGING = {
        "version":1,
        "handlers":{
                    "fileHandler":{
                        "class":"logging.handlers.RotatingFileHandler",
                        "formatter":"myFormatter",
                        "filename":resources.LOG_FILE_PATH,
                        "maxBytes":100000,
                        "backupCount":5
                        },
                    "console":{
                        "class":"logging.StreamHandler",
                        "formatter":"myFormatter"
                        }
                    },        
        "loggers":{
            "aoconnect":{
                "handlers":["fileHandler", "console"],
                "level":"DEBUG",
                }
            },

        "formatters":{
            "myFormatter":{
                "format":"%(asctime)s - %(name)s - %(levelname)s - %(message)s"
                }
            }
        }

這一切似乎都運行良好。

在我的情況下文件大小已滿,刪除server.log文件后它工作

LOGS_DIR = os.path.join(BASE_DIR, 'logs')
LOGGING = {
    'version': 1,
    'handlers': {
    'log_file': {
        'level': 'INFO',
        'class': 'logging.handlers.RotatingFileHandler',
        'filename': os.path.join(LOGS_DIR, 'server.log'),
        'backupCount': 10, # keep at most 10 log files
        'maxBytes': 5*1024*1024 # 5242880 bytes (5MB)
        },
    },
    'loggers': {
        'django': {
            'handlers':['log_file'],
            'propagate': True,
            'level':'INFO',
        },
    },
}

在我的情況下(Windows Server 2016 + IIS + FastCGI + Flask)最后我通過關閉文件夾中的文件索引來修復它。 如何

來源: https : //stackoverflow.com/a/22467917/9199668

順便說一句,它正常工作了幾個月......我不知道為什么......

就我而言,它只發生在 Windows 中。 為了解決這個問題,我將 TimedRotatingFileHandler 日志處理程序的延遲<\/strong>參數更改為 True。

文檔-> https:\/\/docs.python.org\/3\/library\/logging.handlers.html#logging.handlers.TimedRotatingFileHandler<\/a>

暫無
暫無

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

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