我正在为代码创建日志文件,但是我收到以下错误:
[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'
我已经检查了我想要创建日志但仍然收到错误的特定文件夹中的权限。 我的代码是:(名称是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
我的系统的文件结构是:
/ home ai Desktop home ubuntu LCF ws_code GA-LCF blackboard.py main-LCF.py
我从ws_code中的另一个函数lcf.py调用mainLCF.py。
答案 0 :(得分:1)
您需要使用logging.handlers python模块更改日志文件路径。 在我的情况下,我做了以下的事情:
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
它有效。但是我仍然不知道之前为什么要在根目录下创建genetic.log。
答案 1 :(得分:0)
看起来日志记录试图以/genetic.log
打开日志文件。如果将filename作为关键字参数传递给logging.basicConfig
,它会创建一个FileHandler
,将其传递给os.path.abspath
,它会根据您当前的工作目录将文件名扩展为绝对路径。因此,您要么位于根目录中,要么代码会更改当前正在运行的目录。
答案 2 :(得分:0)
尽管您的代码看起来正确,但我认为分配绝对路径更好。如果您在本地计算机上进行开发,并且该应用程序在另一台服务器上运行,则可能存在一些差异,例如谁调用了该进程。
建议将日志写入/var/log/app_name