我正在寻找有关如何将Log4net日志记录到Syslog服务器的示例配置.欢迎任何帮助.
我对syslog消息格式有点困惑.我必须编写一个解析syslog消息的程序.当我读到我在syslog-ng实例中得到的内容时,我得到这样的消息:
Jan 12 06:30:00 1.2.3.4 apache_server: 1.2.3.4 - - [12/Jan/2011:06:29:59 +0100] "GET /foo/bar.html HTTP/1.1" 301 96 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 ( .NET CLR 3.5.30729)" PID 18904 Time Taken 0
Run Code Online (Sandbox Code Playgroud)
我可以清楚地确定真实的消息(在这种情况下是Apache访问日志消息)其余的是关于系统日志消息本身的元数据.
但是,当我阅读RFC 5424时,消息示例如下所示:
没有结构化数据
<34>1 2003-10-11T22:14:15.003Z mymachine.example.com su - ID47 - BOM'su root' failed for lonvick on /dev/pts/8
Run Code Online (Sandbox Code Playgroud)
或结构化数据
<165>1 2003-10-11T22:14:15.003Z mymachine.example.com evntslog - ID47 [exampleSDID@32473 iut="3" eventSource="Application" eventID="1011"] BOMAn application event log entry...
Run Code Online (Sandbox Code Playgroud)
我特意寻找最新,最现代SysLogHandler
的java.util.logging
.
我发现一些可以追溯到2001年至2003年,现在大部分都没有得到支持.
我知道这syslog
是一个非常静态的服务,我想在自己写一些东西之前,如果有任何新的处理程序实现支持Java 1.5和更新的功能.
我对任何其他日志框架或包装器/代理库都不感兴趣.
我不是在寻找SLF4J或任何其他替代日志框架,如本问题所示.
登录到我的 Ubuntu 机器时,我收到一条警告,指出我的磁盘空间不足。回溯,我发现是系统日志,尤其是 kern.log(s) 占用了我的 1TB 磁盘。
-rw-r----- 1 syslog adm 240G Feb 25 14:22 kern.log
-rw-r----- 1 syslog adm 516G Feb 21 07:59 kern.log.1
-rw-r----- 1 syslog adm 1.1K Feb 15 07:39 kern.log.2.gz
-rw-r----- 1 syslog adm 19K Feb 7 07:56 kern.log.3.gz
-rw-r----- 1 syslog adm 37K Feb 1 07:45 kern.log.4.gz
-rw-r----- 1 syslog adm 23G Feb 25 14:52 syslog
-rw-r----- 1 syslog adm 25G Feb 25 08:11 syslog.1
-rw-r----- 1 syslog adm 1.6G Feb 24 07:49 syslog.2.gz
-rw-r----- …
Run Code Online (Sandbox Code Playgroud) 在工作中,我们正在构建一个分布式应用程序(可能跨越局域网上的多台机器,可能稍后在WAN + VPN上跨越几个大陆).我们不希望每台机器都有本地日志文件(填满磁盘而无法集中查看),因此我们需要集中通过网络进行日志记录.大多数日志都不重要,因此UDP对他们来说很好,但有些是丢失重要的警报,必须可靠地传递,这意味着TCP.如果日志记录协议过于繁琐,我们担心拥塞网络,或者如果应用程序没有响应,则将应用程序拖到爬网中.
我考虑过的一些可能性是:
你有其他建议吗?您使用了哪些集中式日志记录解决方案,以及它们的运行情况如何?
编辑:我倾向于抄写员,因为它的存储转发设计将正在运行的应用程序与网络延迟分离.但是在努力安装它之后,我发现(1)它不能作为二进制包使用 - 现在这是不可原谅的 - 而且(2)它非常依赖于一个不能作为二进制包提供的库(thrift)!最糟糕的是,它甚至无法正常编译.这不是发布质量代码,即使在开源中也是如此.
我打算为Debian 打包OpenTibia Server.我想要做的其中一件事是添加启动过程/etc/init.d
和守护otserv
进程.
事实是,我们应该将输出重定向到syslog.这通常通过该syslog()
功能完成.目前,代码集中在:
std::cout << "Stuff to printout" << std::endl;
Run Code Online (Sandbox Code Playgroud)
是否有一种适当的,易于添加的方法将标准输出和标准错误输出重定向到syslog中,而无需将每一个"调用"替换为std :: cout和朋友?
大多数Unix程序员都习惯于定义的接口syslog.h
,并且许多实现(例如glibc)对发送给它的syslog消息的大小没有实际限制,但是应用程序监听通常有限制/dev/log
.
我想知道是否有人知道如何找到syslog的最大消息大小?或者一些关于实际(或通常)限制的好文档?
编辑:
到目前为止,我已经在这个主题上找到了这些RFC:
我需要将事件记录到syslog中.我使用lo4j2和syslog appender.我的appenders阻止log4j2.xml
看起来像这样:
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<Syslog name="syslog" host="localhost" port="514" protocol="UDP" charset="ISO-8859-1">
</Syslog>
<RollingFile name="AppLog" fileName="/var/log/app.log"
filePattern="/var/log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>
</appenders>
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我有一个Console appender和RollingFile appender以及一个特定的PatternLayout.我想为Syslog appender使用相同的PatternLayout.但是,syslog中的日志消息似乎总是使用预定义的布局.我试着做以下事情:
<Syslog name="syslog" host="localhost" port="514" protocol="UDP" charset="ISO-8859-1">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Syslog>
Run Code Online (Sandbox Code Playgroud)
但这没有任何影响.系统日志消息仍然具有相同的预定义格式.
如何确定进入syslog的日志消息的格式?
我一直在寻找一些时间,但还没有找到明确的答案.到目前为止,我发现的唯一链接就是这里.
我希望我的所有应用程序日志都集中在一起(理想情况下是近乎实时的).我们将使用Log4 Appender.我应该使用哪一个:
你在用哪一个?