问题
I am creating Log file for the code but I am getting the following error :
[Tue Jun 11 17:22:59 2013] [error] [client 127.0.0.1] import mainLCF [Tue Jun 11 17:22:59 2013] [error] [client 127.0.0.1] File "/home/ai/Desktop/home/ubuntu/LCF/GA-LCF/mainLCF.py", line 10, in [Tue Jun 11 17:22:59 2013] [error] [client 127.0.0.1] logging.basicConfig(filename='genetic.log',level=logging.DEBUG,format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p') [Tue Jun 11 17:22:59 2013] [error] [client 127.0.0.1] File "/usr/lib/python2.7/logging/__init__.py", line 1528, in basicConfig [Tue Jun 11 17:22:59 2013] [error] [client 127.0.0.1] hdlr = FileHandler(filename, mode) [Tue Jun 11 17:22:59 2013] [error] [client 127.0.0.1] File "/usr/lib/python2.7/logging/__init__.py", line 901, in __init__ [Tue Jun 11 17:22:59 2013] [error] [client 127.0.0.1] StreamHandler.__init__(self, self._open()) [Tue Jun 11 17:22:59 2013] [error] [client 127.0.0.1] File "/usr/lib/python2.7/logging/__init__.py", line 924, in _open [Tue Jun 11 17:22:59 2013] [error] [client 127.0.0.1] stream = open(self.baseFilename, self.mode) [Tue Jun 11 17:22:59 2013] [error] [client 127.0.0.1] IOError: [Errno 13] Permission denied: '/genetic.log'
I have checked the permissions in the particular folder where I want to make the log but still getting the error . My code is : (name is mainLCF.py)
import logging import sys logging.basicConfig(filename='genetic.log',level=logging.DEBUG,format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p') logging.debug("starting of Genetic Algorithm") sys.path.append("/home/ai/Desktop/home/ubuntu/LCF/ws_code") import blackboard from pyevolve import * def eval_func(chromosome): some function here
My system's file structure is :
/ home ai Desktop home ubuntu LCF ws_code GA-LCF blackboard.py main-LCF.py
I am calling mainLCF.py from another function lcf.py which is in ws_code .
回答1:
You need to change the Logfile path by using logging.handlers python module . In my case I did the following stuff :
import logging
from logging.handlers import RotatingFileHandler
import blackboard
WEBAPP_CONSTANTS = {
'LOGFILE': '/home/ai/Desktop/home/ubuntu/LCF/GA-LCF/ga.log',
}
def getWebAppConstants(constant):
return WEBAPP_CONSTANTS.get(constant, False)
LOGFILE = getWebAppConstants('LOGFILE')
log_handler = RotatingFileHandler(LOGFILE, maxBytes=1048576, backupCount=5)
log_handler.setFormatter(logging.Formatter( '%(asctime)s %(levelname)s: %(message)s ' '[in %(pathname)s:%(lineno)d]'))
applogger = logging.getLogger("GA")
applogger.setLevel(logging.DEBUG)
applogger.addHandler(log_handler)
applogger.debug("Starting of Genetic Algorithm")
from pyevolve import *
def eval_func(chromosome):
some function here
and it worked. However I still don't know the reason why it was earlier trying to make genetic.log at root directory .
回答2:
Looks like logging tried to open the logfile as /genetic.log
. If you pass filename as a keyword argument to logging.basicConfig
it creates a FileHandler
which passes it to os.path.abspath
which expands the filename to an absolute path based on your current working dir. So you're either in your root dir or your code changes your current working dir.
回答3:
Although your code seems correct, I think it's better to assign an absolute path. If you develop on your local machine and the app runs on another server, there is probably some differences, like, who calls the process.
Logs are recommended to be written to /var/log/app_name
来源:https://stackoverflow.com/questions/17043814/why-am-i-getting-ioerror-errno-13-permission-denied