为什么在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会产生输出,但不会产生服务类中的两个输出(即使在安装服务并确保它正在运行之后)。
答案 0 :(得分:2)
我发现只有在实际服务循环中登录才能使用日志记录模块,日志文件最终会出现C:\python27\Lib\site-packages\win32
。
我放弃了使用Windows日志记录模块进行日志记录,因为它似乎没有效果。相反,我开始使用Windows日志记录服务,例如servicemanager.LogInfoMsg()
和相关功能。这会将事件记录到Windows应用程序日志中,您可以在事件查看器中找到该日志(开始 - >运行 - >事件查看器,Windows日志文件夹,应用程序日志)。
答案 1 :(得分:1)
您必须编写日志文件的完整路径。
e.g。
fh = logging.FileHandler('C:\\out.log')
答案 2 :(得分:0)
实际上外部记录器初始化了两次。
这两个外部记录器处于不同的进程中。一个是python进程,另一个是windows-service进程。
由于某种原因,第二个没有配置成功,并且在此过程中也在内部记录器中。这就是你无法找到内部日志的原因。