簡體   English   中英

在 python 中使用 RotatingFileHandler 會導致權限被拒絕錯誤 python

[英]Using RotatingFileHandler in python gives permission denied error python

代碼:

import sys

from flask import Flask
import logging
from logging.handlers import RotatingFileHandler
from datetime import datetime

app = Flask(__name__)

formatter = logging.Formatter('%(asctime)s.%(msecs)03d [%(thread)d] [%(levelname)s]: %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
file_hdlr = RotatingFileHandler('logs/debug_{}.log'.format(datetime.utcnow().strftime('%Y_%m_%d')), maxBytes= 1024, backupCount= 10)
file_hdlr.setFormatter(formatter)
file_logger = logging.getLogger('file_logger')
file_logger.setLevel(logging.INFO)
file_logger.addHandler(file_hdlr)

@app.route('/test', methods = ['POST'])
def test():
    """
    This function is for testing API
    
    Returns:
        This function returns a string.
    """
    for i in range(25):
        file_logger.info(f"{i}")
    return "API working correctly"

if __name__ == "__main__":
    app.run(host = '0.0.0.0', port = 5001, debug = True, threaded = True)

追溯:

--- Logging error ---
Traceback (most recent call last):
  File "c:\users\aniket.bote\appdata\local\programs\python\python38\lib
    self.doRollover()
  File "c:\users\aniket.bote\appdata\local\programs\python\python38\libr
    self.rotate(self.baseFilename, dfn)
  File "c:\users\aniket.bote\appdata\local\programs\python\python38\lib
    os.rename(source, dest)
PermissionError: [WinError 32] The process cannot access the file becauUsers\\aniket.bote\\Desktop\\Aniket\\DS_2021_Array_cable_optimization\\iket.bote\\Desktop\\Aniket\\DS_2021_Array_cable_optimization\\logs\\deb
Call stack:
  File "c:\users\aniket.bote\appdata\local\programs\python\python38\lib
    self._bootstrap_inner()
  File "c:\users\aniket.bote\appdata\local\programs\python\python38\lib
    self.run()
  File "c:\users\aniket.bote\appdata\local\programs\python\python38\lib
    self._target(*self._args, **self._kwargs)
  File "c:\users\aniket.bote\appdata\local\programs\python\python38\libst_thread
    self.finish_request(request, client_address)
  File "c:\users\aniket.bote\appdata\local\programs\python\python38\libt
    self.RequestHandlerClass(request, client_address, self)
  File "c:\users\aniket.bote\appdata\local\programs\python\python38\lib
    self.handle()
  File "C:\Users\aniket.bote\Desktop\Aniket\DS_2021_Array_cable_optimiz.py", line 342, in handle
    BaseHTTPRequestHandler.handle(self)
  File "c:\users\aniket.bote\appdata\local\programs\python\python38\lib
    self.handle_one_request()
  File "C:\Users\aniket.bote\Desktop\Aniket\DS_2021_Array_cable_optimiz.py", line 374, in handle_one_request
    self.run_wsgi()
  File "C:\Users\aniket.bote\Desktop\Aniket\DS_2021_Array_cable_optimiz.py", line 319, in run_wsgi
    execute(self.server.app)
  File "C:\Users\aniket.bote\Desktop\Aniket\DS_2021_Array_cable_optimiz.py", line 310, in execute
    for data in application_iter:
  File "C:\Users\aniket.bote\Desktop\Aniket\DS_2021_Array_cable_optimiz_init__.py", line 309, in debug_application
    app_iter = self.app(environ, start_response)
  File "C:\Users\aniket.bote\Desktop\Aniket\DS_2021_Array_cable_optimizine 2088, in __call__
    return self.wsgi_app(environ, start_response)
  File "C:\Users\aniket.bote\Desktop\Aniket\DS_2021_Array_cable_optimizine 2070, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\aniket.bote\Desktop\Aniket\DS_2021_Array_cable_optimizine 1513, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Users\aniket.bote\Desktop\Aniket\DS_2021_Array_cable_optimizine 1499, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**req.v
  File "c:\Users\aniket.bote\Desktop\Aniket\DS_2021_Array_cable_optimiz
    file_logger.info(f"{i}")
Message: '23'
Arguments: ()
--- Logging error ---
Traceback (most recent call last):
  File "c:\users\aniket.bote\appdata\local\programs\python\python38\lib
    self.doRollover()
  File "c:\users\aniket.bote\appdata\local\programs\python\python38\libr
    self.rotate(self.baseFilename, dfn)
  File "c:\users\aniket.bote\appdata\local\programs\python\python38\lib
    os.rename(source, dest)
PermissionError: [WinError 32] The process cannot access the file becauUsers\\aniket.bote\\Desktop\\Aniket\\DS_2021_Array_cable_optimization\\iket.bote\\Desktop\\Aniket\\DS_2021_Array_cable_optimization\\logs\\deb
Call stack:
  File "c:\users\aniket.bote\appdata\local\programs\python\python38\lib
    self._bootstrap_inner()
  File "c:\users\aniket.bote\appdata\local\programs\python\python38\lib
    self.run()
  File "c:\users\aniket.bote\appdata\local\programs\python\python38\lib
    self._target(*self._args, **self._kwargs)
  File "c:\users\aniket.bote\appdata\local\programs\python\python38\libst_thread
    self.finish_request(request, client_address)
  File "c:\users\aniket.bote\appdata\local\programs\python\python38\libt
    self.RequestHandlerClass(request, client_address, self)
  File "c:\users\aniket.bote\appdata\local\programs\python\python38\lib
    self.handle()
  File "C:\Users\aniket.bote\Desktop\Aniket\DS_2021_Array_cable_optimiz.py", line 342, in handle
    BaseHTTPRequestHandler.handle(self)
  File "c:\users\aniket.bote\appdata\local\programs\python\python38\lib
    self.handle_one_request()
  File "C:\Users\aniket.bote\Desktop\Aniket\DS_2021_Array_cable_optimiz.py", line 374, in handle_one_request
    self.run_wsgi()
  File "C:\Users\aniket.bote\Desktop\Aniket\DS_2021_Array_cable_optimiz.py", line 319, in run_wsgi
    execute(self.server.app)
  File "C:\Users\aniket.bote\Desktop\Aniket\DS_2021_Array_cable_optimiz.py", line 310, in execute
    for data in application_iter:
  File "C:\Users\aniket.bote\Desktop\Aniket\DS_2021_Array_cable_optimiz_init__.py", line 309, in debug_application
    app_iter = self.app(environ, start_response)
  File "C:\Users\aniket.bote\Desktop\Aniket\DS_2021_Array_cable_optimizine 2088, in __call__
    return self.wsgi_app(environ, start_response)
  File "C:\Users\aniket.bote\Desktop\Aniket\DS_2021_Array_cable_optimiz    return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
  File "c:\Users\aniket.bote\Desktop\Aniket\DS_2021_Array_cable_optimization\app.py", line 33, in test
    file_logger.info(f"{i}")
Message: '24'
Arguments: ()

生成的日志文件最多包含 22 個數字。我正在嘗試創建一個記錄器,一旦達到緩沖區大小,它將創建一個新的日志文件。 提供的代碼是重新生成問題的獨立代碼。
我正在使用Windows系統。

如果我從文件中刪除“.log”擴展名,則相同的代碼有效

如果你看回溯,有這一行

PermissionError: [WinError 32] The process cannot access the file becauUsers\\\\aniket.bote\\\\Desktop\\\\Aniket\\\\DS_2021_Array_cable_optimization\\\\iket.bote\\\\Desktop\\\\Aniket\\\\DS_2021_Array_cable_optimization\\\\logs\\\\deb

這意味着這里的路徑是錯誤的,這也可以從becauUsers中看出,這在 Windows 中可能不是正確的路徑。 您必須找到它在哪里使用此路徑。

暫無
暫無

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

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