3

为什么在 python 服务中调用日志框架不会产生日志输出(文件、标准输出、...)?

我的 python 服务具有一般形式:

import logging

logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
fh = logging.FileHandler('out.log')
logger.addHandler(fh)

logger.error("OUTSIDE")

class Service (win32serviceutil.ServiceFramework):
    _svc_name_ = "example"
    _svc_display_name_ = "example"
    _svc_description_ = "example"

    def __init__(self,args):
        logger.error("NOT LOGGED")
        win32serviceutil.ServiceFramework.__init__(self,args)
        self.hWaitStop = win32event.CreateEvent(None,0,0,None)
        servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
              servicemanager.PYS_SERVICE_STARTED,
              (self._svc_name_,''))

    def SvcStop(self):

        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        win32event.SetEvent(self.hWaitStop)
        self.stop = True

    def SvcDoRun(self):

        self.ReportServiceStatus(win32service.SERVICE_RUNNING)
        self.main()

    def main(self):
        # Service Logic
        logger.error("NOT LOGGED EITHER")
        pass

第一次调用 logger.error 会产生输出,但不是服务类中的两个(即使在安装服务并确保它正在运行之后)。

4

3 回答 3

2

我发现只有在实际服务循环中的日志才能与日志模块一起使用,并且日志文件最终以C:\python27\Lib\site-packages\win32.

我放弃了使用 Windows 的日志记录模块进行日志记录,因为它似乎不是很有效。相反,我开始使用 Windows 日志服务,例如servicemanager.LogInfoMsg()和相关功能。这会将事件记录到 Windows 应用程序日志,您可以在事件查看器(开始->运行->事件查看器、Windows 日志文件夹、应用程序日志)中找到该日志。

于 2014-04-18T00:50:05.340 回答
1

您必须编写日志文件的完整路径。

例如

fh = logging.FileHandler('C:\\out.log')
于 2017-08-10T10:31:11.850 回答
0

实际上外部记录器初始化了两次。

这两个外部记录器处于不同的进程中。一个是python进程,另一个是windows-service进程。

由于某种原因,第二个没有配置成功,并且在这个过程中也没有配置内部记录器。这就是为什么你找不到内部日志的原因。

于 2013-04-12T07:16:50.710 回答