Python日志记录端口514文件夹/ yyyy / mm / dd

问题描述 投票:0回答:2

[嗨,我想用python脚本登录514 udp端口。日期更改时日志地址不变。我想保存所有日志日志。我想每天在不同的文件夹中记录相同名称的日志。

#!/usr/bin/env python
import os, stat
import datetime
import logging
import SocketServer

HOST, PORT = "0.0.0.0", 514
class SyslogUDPHandler(SocketServer.BaseRequestHandler):
    def handle(self):
        data = bytes.decode(self.request[0].strip())
        socket = self.request[1]
        today = datetime.datetime.now()
        year = today.strftime("%Y")
        month=today.strftime("%m")
        day=today.strftime("%d")
        file_path = "/listen/"  + year +"/" + month + "/" + day 
        file= file_path + "/test.log"       
        if(not os.path.exists(file_path)):
            os.makedirs(file_path)
        logging.basicConfig(level=logging.INFO, format='%(message)s', datefmt='', filename=file, filemode='a')
        logging.info(str(data))

if __name__ == "__main__":
    try:
        server = SocketServer.UDPServer((HOST,PORT), SyslogUDPHandler)
        server.serve_forever(poll_interval=0.5)
    except (IOError, SystemExit):
        raise
    except KeyboardInterrupt:
        print ("Crtl+C Pressed. Shutting down.")
python logging python-2.x socketserver
2个回答
0
投票

我无法真正测试这一点,但是我认为问题可能是因为您的代码总是将数据[[追加记录到日志文件中。因此,请尝试这样做:

class SyslogUDPHandler(SocketServer.BaseRequestHandler): def handle(self): data = bytes.decode(self.request[0].strip()) socket = self.request[1] today = datetime.datetime.now() year = today.strftime("%Y") month = today.strftime("%m") day = today.strftime("%d") file_path = "/listen/" + year + "/" + month + "/" + day file = file_path + "/test.log" if os.path.exists(file_path): filemode = 'a' # Append to existing file. else: os.makedirs(file_path) filemode = 'w' # Write to new file. logging.basicConfig(level=logging.INFO, format='%(message)s', datefmt='', filename=file, filemode=filemode) logging.info(str(data))

0
投票
换行

logging.basicConfig(level=logging.INFO, format='%(message)s', datefmt='', filename=file, filemode=('a' if os.path.exists(file_path) else 'w'))

logging.basicConfig(level=logging.INFO, format='%(message)s', datefmt='', filename=file, filemode=('a' if os.path.exists(file_path) else 'w'))

最终代码

#!/usr/bin/env python import os, stat import datetime import logging import SocketServer HOST, PORT = "0.0.0.0", 514 class SyslogUDPHandler(SocketServer.BaseRequestHandler): def handle(self): data = bytes.decode(self.request[0].strip()) socket = self.request[1] today = datetime.datetime.now() year = today.strftime("%Y") month=today.strftime("%m") day=today.strftime("%d") file_path = "/listen/" + year +"/" + month + "/" + day file= file_path + "/test.log" if(not os.path.exists(file_path)): os.makedirs(file_path) logging.basicConfig(level=logging.INFO, format='%(message)s', datefmt='', filename=file, filemode=('a' if os.path.exists(file_path) else 'w')) logging.info(str(data)) if __name__ == "__main__": try: server = SocketServer.UDPServer((HOST,PORT), SyslogUDPHandler) server.serve_forever(poll_interval=0.5) except (IOError, SystemExit): raise except KeyboardInterrupt: print ("Crtl+C Pressed. Shutting down.")

© www.soinside.com 2019 - 2024. All rights reserved.