我想找到 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) 我正在考虑将第三方Java应用程序连接到我们的日志聚合/分析解决方案(可能是Splunk,但我们还没有完成我们的选择).将Splunk代理挂钩到syslog似乎是最容易的,所以我正在寻找一种方法将应用程序日志重定向到服务器上的本地syslog守护程序.
Java应用程序使用java.util.logging,遗憾的是它没有开箱即用的syslog处理程序(我相信log4j确实如此).有没有经过验证的库可以做到这一点?日志负载不是很大(每个进程大概每分钟10-20条消息,每个主机最多6个进程)但是我关注可靠性和持久性(例如当守护进程停止时会发生什么?...).
任何帮助,将不胜感激...
我们最近从Log4J切换到Logback.除了SyslogAppender中的堆栈跟踪外,日志记录似乎运行良好.它们的前缀就像剩余的日志消息一样.
有没有办法如何禁用此前缀并确保它们将像Log4J SyslogAppender一样打印?提前致谢.
目前的行为:
Apr 02 12:31:08 host.name 2012-04-02T12:31:08.418+0200 ajp-bio-8009-exec-7 com.gooddata.exception.servlet.HttpExceptionTranslator ERROR: Processing client_request=/gdcwebapp/gdc/projects/FoodMartDemo/groups/everyone status=FAILED errorCode=gdc.usergroups.default_group_modification errorDescription="Attempt to modify default group (everyone)" exceptionId=abc37cf0-9c56-4e68-a4a7-2111ca823fd4 component=webapp request_id=cAWvICOaKVFF1VvI userId=1 projectId=FoodMartDemo nodeId=nodeOne nodeId=nodeOne, requestId=cAWvICOaKVFF1VvI, userId=1, projectId=FoodMartDemo
Apr 02 12:31:08 host.name #011at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
Apr 02 12:31:08 host.name #011at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
Apr 02 12:31:08 host.name #011at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
Apr 02 12:31:08 host.name #011at java.lang.reflect.Method.invoke(Method.java:601)
Apr 02 12:31:08 host.name #011at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:212)
Apr 02 12:31:08 host.name #011at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)
Apr 02 12:31:08 host.name #011at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)
Apr 02 12:31:08 host.name #011at …Run Code Online (Sandbox Code Playgroud) 我正在使用 rsyslog 将我的 var/log/message 提供给工具。但是,正如您所看到的,异常出现在多行(每行的时间戳不同)中,而不是记录为单行。我希望它看起来像 catalina.out 消息。有什么办法可以做到这一点。任何帮助将不胜感激。
catalina.out 看起来像这样:
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
Run Code Online (Sandbox Code Playgroud)
var/log/message 看起来像这样
2014-02-20T06:21:32.006782+00:00 something148-084-115 at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
2014-02-20T06:21:32.006782+00:00 something148-084-115 at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
2014-02-20T06:21:32.006784+00:00 something148-084-115 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
2014-02-20T06:21:32.006784+00:00 something148-084-115 at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96)
2014-02-20T06:21:32.006786+00:00 something148-084-115 at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260)
Run Code Online (Sandbox Code Playgroud)
log4j.xml -
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ISO8601} abc: [component="XYZ" priority="%p" thread="%t"] %c.%M:%L - %m%n" /> …Run Code Online (Sandbox Code Playgroud) 我在我的程序中使用 syslog 来生成日志消息。
有没有办法将我的程序的系统日志输出发送到 stdout ?
我不想使用tail命令查看我的程序日志,我想直接在控制台上查看它
我理解的rsyslog是,它是一个syslog在Ubuntu机服务器实现常见。
此外,我的理解是rsyslog可用于挂钩/捕获STDOUT输出以及标准syslog消息。
最后,我的理解是,rsyslog然后可以将任何捕获的消息(再次来自客户端STDOUT或syslog客户端)转发到另一台服务器,例如日志聚合器或另一台rsyslog服务器等。
所以首先,如果我上面所说的有任何不正确,请首先纠正我对如何syslog/rsyslog工作及其相互关系的理解!
如果我的假设或多或少是正确的,那么给出以下两个选项:
STDOUT并配置rsyslog以捕获该流并将日志消息转发到远程进程(例如日志聚合器);或者syslog并配置rsyslog以捕获它并将日志消息转发到同一个远程进程鉴于这两个选项,我更喜欢#1,因为:
STDOUT将打印到控制台;和STDOUT只会被“收集”rsyslog如果我选择选项 #2,在本地运行时我会失去控制台可见性。
话虽如此,是否有任何安全/性能/其他问题/警告/陷阱从登录到STDOUT会使选项 #2 更具吸引力/可取?如果有,它们是什么?
我有一个通常在unix机器上运行的python脚本,我试图在Windows上运行它.我遇到的一个障碍是模块syslog.有没有人知道我可以在Windows机器上解决这个问题,是否有一个等效的Windows包?运行python 2.7.
我在Linux上运行rsyslogd 5.8.6。网络上的其他系统将其用作记录器。事件发生率非常低,经常会收到远程消息,但直到几分钟后才会写到/ var / log / syslog文件中。
我有一个正在监视文件并在有行可用时对其进行处理的应用程序,我需要更快地响应传入的消息。
我可以想到两种方法:将rsyslogd配置为具有零大小的缓存缓冲区,或者在刷新其缓冲区之前将最大延迟设置为0.5,或者使用一些shell命令告诉rsyslogd“立即刷新缓冲区”。我一直找不到该怎么做。
我写了一个小代码,当无法连接到 postgres 数据库时,使用 C Api 将消息发送到系统日志。
int main ( int argc, char **argv )
{
PGconn *psql;
PGresult *res;
int flag = 0;
openlog ( "postgres", LOG_NDELAY, LOG_SYSLOG );
psql = PQconnectdb("hostaddr = '127.0.0.0' port = '5432' dbname = 'RtpDb' user = 'rtp_user_99' password = 'rtp_user' connect_timeout = '10'");
if ( PQstatus(psql) != CONNECTION_OK )
{
//Send an event to syslog for DB Connection Failure
syslog (LOG_EMERG, "%s", PQerrorMessage(psql) )
}
closelog ();
PQclear(res);
PQfinish(psql);
}
Run Code Online (Sandbox Code Playgroud)
当 postgres 数据库连接失败时,即使在 openlog …
不知何故,我无法让这个工作,我需要一些帮助。
我尝试将 systemd 服务写入的 syslog 中的日志过滤到单独的日志文件中。目前我正在使用Debian. 这是我的 rsyslog 配置,/etc/rsyslog.d/19-test.conf包含内容
:msg,contains,"[frontend]" -/var/log/frontend_app.log
Run Code Online (Sandbox Code Playgroud)
systemd 单元文件的内容:
[Service]
ExecStart=/opt/test/current/venv/bin/python -m api.tasks.frontend_app
StandardOutput=syslog
WorkingDirectory=/opt/test/frontend/current
StandardError=syslog
User=coco
ProtectSystem=full
SyslogIdentifier=[frontend]
Run Code Online (Sandbox Code Playgroud)
现在,当我运行时,服务日志被插入syslog但没有插入/var/log/frontend_app.log但是当我尝试这个时:
logger -p local1.info "[frontend] test message"
Run Code Online (Sandbox Code Playgroud)
消息插入 OK 到/var/log/frontend_app.log.
/etc/rsyslog.conf 内容:
# /etc/rsyslog.conf Configuration file for rsyslog.
#
# For more information see
# /usr/share/doc/rsyslog-doc/html/rsyslog_conf.html
#################
#### MODULES ####
#################
module(load="imuxsock") # provides support for local system logging
module(load="imklog") # provides kernel logging support
#module(load="immark") # …Run Code Online (Sandbox Code Playgroud)