我想找到 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) 我正在使用 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 更具吸引力/可取?如果有,它们是什么?
我写了一个小代码,当无法连接到 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) 我正试图在google上进行一些搜索(每5分钟左右循环一次).当它被命中时,我希望它将结果推送到系统日志服务器.我是python的新手所以请原谅无知,我搜索了很多年,但找不到我的问题的答案.
我打算添加多个查询来查找不同的结果,具体取决于logevent不同的查询结果.
WARN "possible hit"
CRITICAL "definatly a hit"
etc
Run Code Online (Sandbox Code Playgroud)
我希望输出例如:log type,url,date/time
下面是我到目前为止一直在玩的代码.我可以搜索并记录文件,但不是我想要的.我只获得时间和偶数类型的格式,我没有在日志中获得我的查询结果.我不知道如何登录系统日志服务器.
#!/usr/bin/python
import urllib
import simplejson, logging
query = urllib.urlencode({'q' : 'SEARCHTERMHERE'})
url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s' \ % (query)
search_results = urllib.urlopen(url)
json = simplejson.loads(search_results.read())
results = json['responseData']['results']
for i in results:
logging.basicConfig(format='%(asctime)s %(message)s', filename='hits.log')
logging.warning ('Likley hit')
print i['url']
#!/usr/bin/python
import urllib
import simplejson
import logging
from logging.handlers import SysLogHandler
query = urllib.urlencode({'q' : 'SEARCHTERMHERE'})
url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s' \
% (query)
search_results = urllib.urlopen(url)
json = simplejson.loads(search_results.read())
results …Run Code Online (Sandbox Code Playgroud) 如何限制syslog管理的日志文件的总大小?超出此大小限制(配额)时,可能应删除最早的归档日志文件.
一些日志文件是LOG_LOCALn指定的自定义文件,但我想这与配额问题无关.
谢谢!
我希望将容器的日志保存到主机中每个容器的文件中。我阅读了有关通过日志记录驱动程序执行相同操作的信息。
由于我的主机运行ubuntu 14.04 rsyslog(默认情况下已运行),因此我想使用syslog。
以下命令用于运行容器:
docker run -it --log-driver=syslog --log-opt syslog-address=udp://localhost:514 prashant23/ubuntu-java:sample-jdbc-project bash
Run Code Online (Sandbox Code Playgroud)
我没有任何错误地进入了容器。就这样?我怎么知道在哪里可以看到主机上的日志?我做对了吗?我不知道syslog。我是否还需要在容器上配置系统日志?有没有更好的方法来达到相同的目的。
我不知道该用什么syslog-address。从哪里可以获取此参数的值?我在某处读取默认值是udp://localhost:514
我们正在使用heroku的日志流失将日志汇总到Papertrail。一切工作正常,除了,我不确定如何设置一次性测功机的日志记录,我们使用它来运行脚本。
我以为耗油量配置将适用于一次性测功机,但是我没有看到我期望使用heroku调度程序运行的作业的输出。为了弄清楚发生了什么,我尝试运行
# heroku run bash --app myapp
# babel-node
> var logger = require('bunyan/my_configured_logger');
> logger.info('YO');
Run Code Online (Sandbox Code Playgroud)
我希望这会导致原木被运送到纸路,但没有骰子。因此,我尝试了更简单的命令行
> logger "YO"
Run Code Online (Sandbox Code Playgroud)
而且这也不起作用。因此,要么我的测试被误导了,要么漏极配置不适用于一次性测功机。我认为前者更有可能。
如何测试日志清除(为远程papertrail syslog配置)正常工作?