我有一个Python脚本,实际上是一个小型的socket服务器,可以为我执行一些简单的网络任务。我开始将其作为upstart服务运行,以便跟踪它并管理它是否正在运行。为了记录信息,我使用Python的内置logging模块。当作为Upstart服务运行时,我注意到一个小问题:所有时间调用都是GMT时间。当独立运行它(无论是
编辑:相关代码:我有一个助手类,方便地称为helper,其中包含一些常用函数(我知道它需要更好地组织,但它是相当快速地拼凑起来的)。最值得注意的是我用来设置日志记录器的这个函数:
./scriptname.py
还是python scriptname.py
)时,它使用本地时间,并且Python知道本地时间。系统时间已正确设置,只有在作为upstart服务运行时才会出现此行为。有人知道为什么会发生这种情况以及我该如何解决吗?编辑:相关代码:我有一个助手类,方便地称为helper,其中包含一些常用函数(我知道它需要更好地组织,但它是相当快速地拼凑起来的)。最值得注意的是我用来设置日志记录器的这个函数:
class helper:
log_format = '%(asctime)-25s %(name)-25s %(levelname)-12s %(message)s'
@staticmethod
def createLogger(name):
rotatingFile = logging.handlers.RotatingFileHandler('/var/log/myLog.log', maxBytes=1048576, backupCount=5)
rotatingFile.setLevel(logging.DEBUG)
formatter = logging.Formatter(helper.log_format)
formatter.time = localtime()
rotatingFile.setFormatter(formatter)
log = logging.getLogger(name)
log.setLevel(logging.DEBUG)
logging.basicConfig(format=helper.log_format, level=logging.DEBUG)
if not log.handlers:
log.addHandler(rotatingFile)
return log
它在我的一个课程中被用作以下方式:
class MyClass:
def __init__(self):
self._log = helper.createLogger('LogName')
self._log.info('Some relevant info')
_log = None
这是使用Python内部日志工具的基本操作。在我注意到这个问题之后,我添加了formatter.time = localtime()
,但在意识到它只在作为服务运行时出现问题之前。这并没有起到帮助作用。
下面是我从教程中学到的(非常基础的)Upstart配置:
description "Blah blah"
author "My Name <My Email>"
start on runlevel [234]
stop on runlevel [0156]
exec /path/to/script.py
respawn
exec TZ=/usr/share/zoneinfo/US/Central
和exec export TZ=/usr/share/zoneinfo/US/Central
,但当我重新启动服务时,它仍然显示GMT时间。 - Annath