[嗨,我想用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.")
我无法真正测试这一点,但是我认为问题可能是因为您的代码总是将数据[[追加记录到日志文件中。因此,请尝试这样做:
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))
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.")