我正在尝试确定用于记录自定义文件的功能.
背景
我们有几个PHP进程,它们都以Apaches(mod_php)和Deamons(CLI,forked)运行.我希望能够为每个要写入的进程/任务指定一个日志文件.对于作为Deamons的Apache进程,多个进程将写入同一文件.
选项
PHP提供error_log()
和syslog()
.两者似乎提供或多或少相同的功能.
我的问题
伙计们,我找不到适用于Linux的syslog()的重入版本...有吗?如果不是,你呢?显而易见的答案是将日志记录工具移动到单独的线程并序列化对syslog的访问...
我只有npm安装node-syslog但它不起作用.
我有一个系统日志服务器(IP地址和local0).
我正在寻找一个syslog模块来帮助我将消息发布到syslog.但我不知道应该使用哪一个.请给我一些建议.谢谢.
哦..如果有一个好的syslog解析器(node.js),请告诉我.:)
当我在我的mac上运行时:
import logging.handlers
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
syslog_address = '/var/run/syslog'
logger.addHandler(logging.handlers.SysLogHandler(syslog_address))
logger.error("What the crap?")
Run Code Online (Sandbox Code Playgroud)
它在syslog中显示如下:
Oct 18 19:02:06 nick Unknown[4294967295] <Error>: What the crap?
Run Code Online (Sandbox Code Playgroud)
为什么它是未知的?在剧本名称之后,它不应该足够聪明吗?
我有一个应用程序myapp
应该日志文件发送只到/var/log/myapp.log
.myapp
是用C++编写的.以下示例代码仅将日志发送到/ var/log/syslog.我的操作系统是Linux - Ubuntu 12.04 - 具体而言.我还发现我的机器安装了rsyslog而不是syslog.
#include <stdio.h>
#include <unistd.h>
#include <syslog.h>
int main(void) {
openlog("myapp", LOG_PID|LOG_CONS, LOG_USER);
syslog(LOG_INFO, "abc 10");
closelog();
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我们在Linux上有一个使用syslog机制的应用程序.花了一周时间试图弄清楚为什么这个应用程序的运行速度低于预期,我们发现如果我们删除了syslog,并且只是直接写入日志文件,性能会大大提高.
我理解为什么syslog比直接文件写入慢.但我想知道:有没有办法配置syslog来优化其性能?
我正在尝试配置Tomcat和webapp(Atlassian JIRA)以通过syslog记录所有内容.
这是我添加到webapp log4j.properties(atlassian-jira/WEB-INF/classes/log4j.properties)的内容:
log4j.rootLogger=WARN, syslog
log4j.appender.syslog=org.apache.log4j.net.SyslogAppender
log4j.appender.syslog.facility=LOCAL0
log4j.appender.syslog.layout.ConversionPattern=%-5p [%t] [%c]: %m%n
log4j.appender.syslog.layout=org.apache.log4j.PatternLayout
log4j.appender.syslog.SyslogHost=my.syslog.server.fqdn
Run Code Online (Sandbox Code Playgroud)
但是,没有任何内容通过syslog发送.我在端口514上嗅出了传出的数据包,没有任何内容出现.
谢谢你的帮助!
我使用logback来更新syslog,这是我配置我的appender的方式:
<appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender">
<syslogHost>localhost</syslogHost>
<facility>LOCAL0</facility>
<suffixPattern>[%thread] %logger %msg</suffixPattern>
</appender>
Run Code Online (Sandbox Code Playgroud)
我更新了rsyslog.conf以监听UDP事件,取消注释以下行:
# Provides UDP syslog reception
$ModLoad imudp.so
$UDPServerRun 514
Run Code Online (Sandbox Code Playgroud)
conf更改后重新启动syslog守护程序.
在我的所有测试盒上,它似乎工作得很好!但是,系统syslog上的一个没有被我的进程更新(其他东西正在更新它就好了),我想知道如何调试这个问题?我想到的任何事情都会浮现在脑海中?
谢谢你的任何想法
我已修改配置rsyslogd
以禁用RSYSLOG_TraditionalFileFormat
.但是,apache日志仍然/var/log/apache/error.log
只显示第二个精确度.
还有其他需要配置的东西吗?
我正在使用 log4j syslog 附加程序,并注意到当发生异常时,附加程序将堆栈跟踪中的每个条目写入新行。
有没有一种方法可以对其进行配置,以便整个堆栈跟踪将作为一行而不是多行?