gpt4 book ai didi

perl - 从 perl 发送系统日志消息

转载 作者:行者123 更新时间:2023-12-05 01:02:14 24 4
gpt4 key购买 nike

我们使用 local2 的设施代码从我们的 perls 脚本发送大量系统日志消息。这在 Red Hat 上工作得很好,但在 SunOS 上,消息似乎不会发送到 local2。例如,这是一个最小的脚本

#!/usr/bin/perl

use strict;
use warnings;

use Sys::Syslog qw(:DEFAULT :standard :macros);
openlog("", 'ndelay', 'local2');
syslog('info', "ItWorks");
`logger -p local2.info "ItWorks"`;

在这个脚本中,我通过 Syslog perl 模块和 logger 命令发送日志。只有第二条消息似乎会发送到 local2。我认为它不会转到 local2 的原因是我们在 syslog.conf 文件中设置了一个规则来转发 local2,并且只有第二条消息被转发。当我查看日志文件中的 2 条消息时,它们看起来略有不同,我不确定这是否重要

Sep  2 11:41:22 ssapp7001v <150>Sep  2 11:41:22 d336599: ItWorks
Sep 2 11:41:22 ssapp7001v d336599: [ID 702911 local2.info] ItWorks

我还应该补充一点,我在 perl 代码中尝试了各种组合,将 local2 用作字符串、常量,并在 openlog 调用和/或 syslog 调用中指定它。这些似乎都没有任何区别。我可以只使用反引号和调用记录器,但这是我最后的选择,因为我必须处理可能对命令行不友好的字符,以及为每条日志消息打开一个新进程的性能损失。不幸的是,在此服务器上进行任何配置更改是不可能的。

最佳答案

看起来 Perl 系统日志模块在 SunOS 上有一些问题。这些问题可能已经解决,但对我来说更新不是一个选项,因为这台服务器归公司的另一个部门所有。我最终所做的只是使用 logger 命令行实用程序。这远非理想,但确实有效。此处的代码会关闭每次调用的记录器,但它可以很容易地保持打开状态。保持打开状态的问题是您无法更改严重性。

open(my $fh, "| logger -p $facility.$severityName");
print $fh $logmsg . "\n";
close($fh);

另一个选项是调用 syslog API,但我对此有点了解,只需要在这个阶段工作的东西:-)

关于perl - 从 perl 发送系统日志消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18564807/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com