Я пытаюсь написать простой клиент системного журнала.
Это работает довольно хорошо и приводит к исключению, когда сервер системного журнала неожиданно завершает работу.Единственная проблема, которую я обнаружил во время отладки, заключается в следующем:
Когда я выключаю сервер системного журнала, он сразу не выдает исключение, когда я пытаюсь отправить сообщение.Он генерирует исключение только после следующей итерации, когда сервер системного журнала не работает.Поэтому в основном я потеряю одно сообщение.
Пожалуйста, посмотрите пример / шаги ниже:
1.) Сервер системного журнала запущен, я отправляю первое сообщение "test1" из цикла for, этоявляется успешным.
2.) Я выключаю сервер системного журнала, теперь я отправляю второе сообщение «test2» из цикла for (во время отладки).Ничего не происходит, нет исключений!
3.) Я отправляю третье сообщение «test3», теперь выдается исключение.
Как это возможно?Почему он не генерирует исключение в первой итерации, когда сервер системного журнала не работает?
class Syslog:
def __init__(self,host="localhost",port=514,facility=Facility.DAEMON):
self.host = host
self.port = port
self.facility = facility
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
def connect(self):
try:
self.socket.connect((self.host, self.port))
except Exception as e:
print("failed setting up connection")
def send(self, message,level):
data = "<%d>%s" % (level + self.facility*8, message + "\n")
try:
self.socket.sendall(data.encode('utf-8'))
except Exception as e:
print("send failed")
#if __name__ == '__main__':
syslog1 = Syslog(host='HOSTIPADDRESS-NAME')
syslog1.connect()
messages = ["test1","test2","test3","test4","test5","test6","test7"]
for message in messages:
syslog1.send(message,Level.WARNING)