我已经在syslog appender上多次阅读了logback的文档.我的印象是系统日志守护程序在每台计算机上运行,所以我设置配置就像在他们的示例中一样.当我运行程序时,在检查系统日志时没有发生错误,那里没有记录任何内容.
<appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender">
<syslogHost>my ip adress</syslogHost>
<facility>USER</facility>
<suffixPattern>[%thread] %logger %msg</suffixPattern>
</appender>`
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用perl制作日志分析器.分析器将在AIX服务器的后台运行24/7,并从syslog将日志定向到的管道(从整个网络)读取.基本上:
logs from network ----> named pipe A --------> | perl daemon
----> named pipe B --------> | * reads pipes
----> named pipe c --------> | * decides what to do based on which pipe
Run Code Online (Sandbox Code Playgroud)
因此,例如,我希望我的守护程序能够配置为mail root@domain.com写入的所有日志named pipe C.为此,我假设守护进程需要有一个哈希(perl的新内容,但这似乎是一个合适的数据结构),它可以在运行中进行更改并告诉它如何处理每个管道.
这可能吗?或者我应该创建一个.conf文件/etc来保存信息.像这样的东西:
namedpipeA:'mail root@domain.com'
namedpipeB:save:'mail user@domain.com'
Run Code Online (Sandbox Code Playgroud)
所以从中获取任何东西A将被邮寄到,root@domain.com并且所有内容都B将保存到日志文件中(通常是这样)并且它将被发送到user@domain.com
看到这是我第一次使用Perl和我第一次创建一个守护进程,我是否仍然坚持KISS校长这样做?还有,我应该遵守哪些惯例?如果您在回复时可以考虑到我缺乏知识,那将是最有帮助的.
我有一个使用log4j SyslogAppender(facility = USER)的java应用程序,我可以看到在端口514上使用tcpdump我的应用程序正在发送预期的日志消息作为数据报,netstat也向我显示syslogd(red hat)正在运行并正在监听0.0 .0.0:514但我没有在/ var/log/messages中看到任何日志记录.
在我的syslog.conf中,我有
*.info /var/log/messages
Run Code Online (Sandbox Code Playgroud)
我对SyslogAppender的转换模式是
%d{MMM dd HH:mm:ss} %F %L %5p [%t] %m %n"
Run Code Online (Sandbox Code Playgroud)
我无能为力,为什么它没有记录或我应该在哪里找到什么是失败的.我没有足够的权限在机器上启动/停止syslogd或手动运行以启用详细的调试日志.
有关我如何进行的任何指示?
编辑:
下面的Appender
private void initSyslog() {
SyslogAppender syslogAppender = new SyslogAppender();
syslogAppender.setName("syslog");
syslogAppender.setLayout(new PatternLayout("%d{MMM dd HH:mm:ss} %F %L %5p [%t] %m %n"));
syslogAppender.setFacility("USER");
syslogAppender.setFacilityPrinting(true);
syslogAppender.setSyslogHost("localhost");
syslogAppender.activateOptions();
Logger.getRootLogger().addAppender(syslogAppender);
Logger.getRootLogger.info("Syslogdone");
}
Run Code Online (Sandbox Code Playgroud) 大多数应用程序和服务都记录到文件系统.他们为什么不使用syslog?是慢还是不可靠?
使用syslog的真正优点和缺点是什么?
我有一个java程序,我想在fedora机器上登录/ var/log/messages文件.我在log4j SyslogAppender中使用但它不起作用.
我的log4j属性文件包含
# Set root category priority to INFO and its only appender to CONSOLE.
log4j.rootCategory=INFO, CONSOLE, SYSLOG
#log4j.rootCategory=INFO, CONSOLE, LOGFILE
# Set the enterprise logger priority to DEBUG
log4j.logger.com.locaid=INFO, CONSOLE, LOGFILE, SYSLOG
# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=/home/dev/app.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=[%d{dd/MM/y HH:mm:ss}][%t][%1p] %c - %m%n
log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender
log4j.appender.SYSLOG.syslogHost=localhost
log4j.appender.SYSLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.SYSLOG.layout.conversionPattern=%d{ISO8601} …Run Code Online (Sandbox Code Playgroud) 我正在使用SQL Server 2008,并注意到缺少一个重要的存储过程.
如何找出删除存储过程的时间和人员.
有没有办法在使用phpunit进行单元测试时对从'error_log("Message")调用创建的输出运行测试?
示例代码,我的一个函数使用luhn算法测试信用卡:
if($checkLuhn && ($this->_luhn_check($cardNumber) == false)) {
error_log(__METHOD__ . " cardNumber failed luhn algorithm check.");
return false;
}
Run Code Online (Sandbox Code Playgroud)
$ checkLuhn是传入的布尔值,告诉它是否进行检查,如果$ cardNumber通过,_luhn_check()返回true.问题是,我在这个函数中有多个测试可以返回false.我可以在返回值上使用assertEquals,但也想检查抛出错误的原因.
您可以覆盖error_log或以其他方式在单元测试中获取syslog输出吗?
使用docker,我可以通过log-driver = syslog命令行选项将容器日志转发到syslog.如何通过Kubernetes yaml/json描述符传递这些docker参数?
我有这个/etc/rsyslog.conf:
local0.* /var/log/local.log
Run Code Online (Sandbox Code Playgroud)
我有一个简单的 python 脚本,它从标准输入中读取并应该发送到 local0
#!/usr/bin/python3
import sys, syslog
syslog.openlog(ident="MY_SCRIPT", facility=syslog.LOG_LOCAL0)
for line in sys.stdin:
syslog.syslog(syslog.LOG_WARNING, f"Message\n\n")
Run Code Online (Sandbox Code Playgroud)
但它不起作用。rsyslog没有看到消息local0
只有当我更改为*.*rsyslog才能看到它:
*.* /var/log/local.log
Run Code Online (Sandbox Code Playgroud)
我假设我没有在我的 python 脚本中正确配置工具。
如何指定我要登录local0?
我想找到 Ruby 提供的最快的记录器。我的直觉告诉我 syslog 会在这场比赛中获胜。但我的直觉似乎是错误的。Syslog 是我测试过的三个记录器中最慢的。我使用的是我的 MacBook Pro、OSX 10.6 (Snow Leopard)、Intel Core2 Duo、4GB 内存和由 MacPorts 构建的 Ruby 1.8.7。难道我做错了什么?或者 Ruby 的 syslog 实现就是这么慢?如果结果与我的不同,请随时发布您的结果。也欢迎您将您最喜欢的 Ruby 记录器添加到基准测试中。我的目标是找到可用的最快的记录器。我只对纯性能(吞吐量)感兴趣。像多目标日志记录这样的功能在这里不是问题。
# loggers_bench.rb
require 'rbench'
require 'activesupport'
require 'syslog'
require 'logger'
buffered = ActiveSupport::BufferedLogger.new('buffered.log')
logger = Logger.new('logger.log')
syslog = Syslog.open('rb_syslog')
TIMES = 10_000
RBench.run(TIMES) do
column :syslog, :title => 'Syslog'
column :logger, :title => 'Logger'
column :buffered, :title => 'ActiveSuppoort::BufferedLogger'
report '#info' do
syslog {
300.times do |i|
syslog.info "hello #{i}"
end
}
logger {
300.times do …Run Code Online (Sandbox Code Playgroud) syslog ×10
logging ×4
java ×2
log4j ×2
appender ×1
benchmarking ×1
comparison ×1
daemon ×1
docker ×1
kubernetes ×1
logback ×1
named-pipes ×1
perl ×1
php ×1
phpunit ×1
python-3.x ×1
rsyslog ×1
ruby ×1
slf4j ×1
sql-server ×1
unit-testing ×1
unix ×1