- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个进程使用 logging.SyslogHandler 通过 TCP 将日志发送到系统日志服务器。不幸的是,如果系统日志服务器由于某种原因重新启动,进程将停止发送日志并且无法重新建立连接。
我想知道是否有人知道克服这种行为并强制 logging.SyslogHandler 重新建立连接的方法。
使用处理程序的代码类似于:
import logging
import logging.handlers
import logging.config
logging.config.fileConfig('logging.cfg')
logging.debug("debug log message")
logging.cfg:
[loggers]
keys=root,remote
[handlers]
keys=local,remote
[logger_remote]
qualname=remote
level=INFO
handlers=remote
[logger_root]
qualname=root
level=DEBUG
handlers=local
[handler_local]
class=handlers.StreamHandler
level=DEBUG
formatter=local
args=(sys.stdout,)
[handler_remote]
class=handlers.SysLogHandler
level=DEBUG
formatter=remote
args=(('localhost', 514), handlers.SysLogHandler.LOG_USER, 1)
[formatters]
keys=local,remote
[formatter_local]
format=%(module)s %(levelname)s %(message)s
[formatter_remote]
format=%(asctime)s %(message)s
系统日志服务器重启后我不断收到的错误是:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/logging/handlers.py", line 866, in emit
self.socket.sendall(msg)
File "/usr/local/lib/python2.7/socket.py", line 228, in meth
return getattr(self._sock,name)(*args)
error: [Errno 32] Broken pipe
如果有任何见解,我将不胜感激。谢谢!
最佳答案
我遇到了同样的问题。我必须编写一个自定义处理程序来处理损坏的管道异常并重新创建套接字。
class ReconnectingSysLogHandler(logging.handlers.SysLogHandler):
"""Syslog handler that reconnects if the socket closes
If we're writing to syslog with TCP and syslog restarts, the old TCP socket
will no longer be writeable and we'll get a socket.error of type 32. When
than happens, use the default error handling, but also try to reconnect to
the same host/port used before. Also make 1 attempt to re-send the
message.
"""
def __init__(self, *args, **kwargs):
super(ReconnectingSysLogHandler, self).__init__(*args, **kwargs)
self._is_retry = False
def _reconnect(self):
"""Make a new socket that is the same as the old one"""
# close the existing socket before getting a new one to the same host/port
if self.socket:
self.socket.close()
# cut/pasted from logging.handlers.SysLogHandler
if self.unixsocket:
self._connect_unixsocket(self.address)
else:
self.socket = socket.socket(socket.AF_INET, self.socktype)
if self.socktype == socket.SOCK_STREAM:
self.socket.connect(self.address)
def handleError(self, record):
# use the default error handling (writes an error message to stderr)
super(ReconnectingSysLogHandler, self).handleError(record)
# If we get an error within a retry, just return. We don't want an
# infinite, recursive loop telling us something is broken.
# This leaves the socket broken.
if self._is_retry:
return
# Set the retry flag and begin deciding if this is a closed socket, and
# trying to reconnect.
self._is_retry = True
try:
__, exception, __ = sys.exc_info()
# If the error is a broken pipe exception (32), get a new socket.
if isinstance(exception, socket.error) and exception.errno == 32:
try:
self._reconnect()
except:
# If reconnecting fails, give up.
pass
else:
# Make an effort to rescue the recod.
self.emit(record)
finally:
self._is_retry = False
关于Python SysLogHandler 通过 TCP : handling connection loss,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40091456/
正如 Keras 手册中所述 -使用 Pyhton 进行深度学习-,对于多输出模型,我们需要为网络的不同头指定不同的损失函数。但由于梯度下降要求您最小化标量,因此您必须将这些损失组合成单个值才能训练模
我无法判断这个错误是由于技术错误还是超参数造成的,但我的 DC-GAN 的鉴别器损失一开始很低,然后逐渐攀升,在 8 左右减慢,而我的发电机损失则大幅下降。我在大约 60,000 epoch 时结束了
我对以下日志有点怀疑,这是我在训练深度神经网络时得到的回归目标值在 -1.0 和 1.0 之间,学习率为 0.001 和 19200/4800 训练/验证样本: ___________________
简而言之: 我训练了一个自动编码器,其验证损失始终高于其训练损失(见附图)。 我认为这是过度拟合的信号。然而,我的自动编码器在测试数据集上表现良好。我想知道是否: 1)引用下面提供的网络架构,任何人都
我正在处理文本序列,序列长度在 1-3 之间。标签是一个“分数”。我有超过 500 万个样本。我的网络如下所示(Keras): model.add(Embedding(word_count, 128,
我正在训练用于图像语义分割的 CNN U-net 模型,但是训练损失的减少速度似乎比验证损失的减少速度快得多,这正常吗? 我使用的是 0.002 的损失 下图可以看到训练和验证损失: 最佳答案 是的,
我目前正在通过研究 MNIST 示例等示例来学习卷积神经网络。在神经网络的训练过程中,我经常看到如下输出: Epoch | Train loss | Valid loss | Train
我设计了自己的损失函数。但是,当尝试恢复到训练期间遇到的最佳模型时 model = load_model("lc_model.h5") 我收到以下错误: -----------------------
在基于RAW套接字的数据包发送测试期间,我发现了非常令人讨厌的症状。 使用默认的RAW套接字设置(尤其是SO_SNDBUF大小), 原始套接字可以毫无问题地发送100,000个数据包,但大约花费了8秒
我用JAVA编写了以下方法: public static float surface(float r) { return(4*Math.PI*Math.pow(r,2));
我正在学习pytorch,并正在做anpr项目,它是基于tensorflow的(https://github.com/matthewearl/deep-anpr, 奥 git _a)作为练习,将其移植
我试图找出为什么我的 Java 程序中会出现这种精度丢失错误。 这是错误: error: possible loss of precision int digit = num/Mat
我刚开始在 tensorflow(r1.0) 中使用 ctc 损失层,对“标签”输入有点困惑 在tensorflow的API文档中是这样写的 labels: An int32 SparseTensor
我知道在 Java 中将 BigDecimal 值转换为 Double 时存在“精度问题”。使用 BigDecimal.doubleValue() 简单地从 BigDecimal 转换为 Double
我读了 related question keras 自定义损失函数必须为每个批处理项返回一个标量。 我写了一个损失函数,输出整个批处理的标量,网络似乎收敛了。但是,我找不到任何关于此的文档或代码中究
我有一个 C++ 应用程序,它使用 UDP 服务器(使用 Boost.Asio)以高频率(每秒 3500 个数据包)从千兆本地网络设备接收数据包。一些用户报告了一些数据包丢失。所以最后我选择并行运行
更换了 用response.sendRedirect("URL"); ,我发现我知道一旦重定向发生就会失去 session 。有没有办法通过重定向保留 session ,或者重建 session co
我正在使用 DQN 算法在我的环境中训练代理,如下所示: 代理通过选择离散 Action (左、右、上、下)来控制汽车 目标是以理想的速度行驶而不会撞到其他汽车 状态包含代理的汽车和周围汽车的速度和位
我正在实现简单的 DQN算法使用 pytorch , 解决来自 gym 的 CartPole 环境.我已经调试了一段时间,我无法弄清楚为什么模型没有学习。 观察: 使用 SmoothL1Loss性能比
我正在开发一个网络打印海报打印应用程序。 我正在考虑使用 PHP 来裁剪用户上传的图像,我们最终将打印 PHP 裁剪的图像。 我担心的是原始用户上传的图像与被 PHP 裁剪后的图像之间的“质量”会有所
我是一名优秀的程序员,十分优秀!