Syslog4j如何实现接收日志
2015-09-10 12:23
453 查看
1、Syslog4j是一个实现Syslog(RFC3164)协议的Java开源类库包括客户端与服务器端。通过 UDP/IP, TCP/IP, TCP/IPover SSL/TLS, Unix Syslog, 和 Unix Socket 等协议进行日志记录。
2、下载地址 :http://syslog4j.org/ 需要的jar包:syslog4j-0.9.46.jar
命令参数说明如下:
SyslogServer [-h<host>] [-p <port>] [-o <file>] [-a] [-q] <protocol>
-h <host> host or IP to bind
-p<port> port to bind
-t<timeout> socket timeout (in milliseconds)
-o<file> file to write entries(overwrites by default)
-a append to file (instead ofoverwrite)
-q do not write anything to standardout
protocol Syslog4j protocol implementation (tcp,udp, ...)
命令执行方法如下:
java -cp syslog4j-0.9.46.jar org.productivity.java.syslog4j.server.SyslogServerMain -p 5555 udp -o d:/workspace/syslog.log
代表的含义是使用本机的5555端口,通过UDP协议接收日志。
在生成服务类实例时需要两个参数:协议名称和配置类。配置类定义了通讯协议中需要的一些配置项,比如:主机,端口,协议,是否写文件等等。配置类也根据不同的通讯协议分为UDP和TCP两种,共同实现相同的接口SyslogServerConfigIF。其继承关系如下:
创建好协议处理类后会注册到SyslogServer的实体池中供使用。
当需要将日志数据写到本地文件时,需要创建一个事件处理器来实现写日志。事件处理器保存到协议处理类的配置项中。
if(options.fileName != null) {
SyslogServerEventHandlerIF eventHandler = newFileSyslogServerEventHandler(options.fileName,options.append);
syslogServerConfig.addEventHandler(eventHandler);
}
事件处理器的作用是对日志内容如何处理比如写到文件中或是输出到屏幕上。事件类SyslogServerEventIF是对接收到的数据进行解析。
以UDP协议为例,Syslog4j处理流程如下:
public class Syslog4jDemo {
public static void main(String []args){
// Set a Specific Host, then Log to It
SyslogIF syslog = Syslog.getInstance("udp");
syslog.getConfig().setHost("localhost");
syslog.getConfig().setPort(5555);
syslog.info("Today is good day!");
}
}
首先我们按上面的方法启动接收端程序,然后运行这段发送代码,接下来就可以在指定的log文件中看到结果了。
参考原文:http://blog.csdn.net/peterwanghao/article/details/6958580
2、下载地址 :http://syslog4j.org/ 需要的jar包:syslog4j-0.9.46.jar
3、示例程序
Syslog4j本身自带了一个服务端的例子程序:SyslogServerMain。这是一个命令行方式的日志服务器的实现。命令参数说明如下:
SyslogServer [-h<host>] [-p <port>] [-o <file>] [-a] [-q] <protocol>
-h <host> host or IP to bind
-p<port> port to bind
-t<timeout> socket timeout (in milliseconds)
-o<file> file to write entries(overwrites by default)
-a append to file (instead ofoverwrite)
-q do not write anything to standardout
protocol Syslog4j protocol implementation (tcp,udp, ...)
命令执行方法如下:
java -cp syslog4j-0.9.46.jar org.productivity.java.syslog4j.server.SyslogServerMain -p 5555 udp -o d:/workspace/syslog.log
代表的含义是使用本机的5555端口,通过UDP协议接收日志。
4、程序分析
Syslog4j服务端的入口为SyslogServer。在创建此类时会初始化两个SyslogServer实例:实现UDP协议的服务类(UDPNetSyslogServer)和实现TCP协议的服务类(TCPNetSyslogServer)。这两个具体的协议处理类都共有相同的接口SyslogServerIF。其继承关系如下在生成服务类实例时需要两个参数:协议名称和配置类。配置类定义了通讯协议中需要的一些配置项,比如:主机,端口,协议,是否写文件等等。配置类也根据不同的通讯协议分为UDP和TCP两种,共同实现相同的接口SyslogServerConfigIF。其继承关系如下:
创建好协议处理类后会注册到SyslogServer的实体池中供使用。
当需要将日志数据写到本地文件时,需要创建一个事件处理器来实现写日志。事件处理器保存到协议处理类的配置项中。
if(options.fileName != null) {
SyslogServerEventHandlerIF eventHandler = newFileSyslogServerEventHandler(options.fileName,options.append);
syslogServerConfig.addEventHandler(eventHandler);
}
事件处理器的作用是对日志内容如何处理比如写到文件中或是输出到屏幕上。事件类SyslogServerEventIF是对接收到的数据进行解析。
以UDP协议为例,Syslog4j处理流程如下:
5.日志发送
接下来我们准备一个简单的日志发送端程序,如下:public class Syslog4jDemo {
public static void main(String []args){
// Set a Specific Host, then Log to It
SyslogIF syslog = Syslog.getInstance("udp");
syslog.getConfig().setHost("localhost");
syslog.getConfig().setPort(5555);
syslog.info("Today is good day!");
}
}
首先我们按上面的方法启动接收端程序,然后运行这段发送代码,接下来就可以在指定的log文件中看到结果了。
参考原文:http://blog.csdn.net/peterwanghao/article/details/6958580
相关文章推荐
- 工业产品生产许可证审查费用已取消
- Java实现图的遍历(深搜与广搜)
- iOS 录屏大师启动页广告
- TortoiseSVN使用详解
- Android最佳性能实践(三)——高性能编码优化
- 快速提高Android开发效率的Web工具
- vc++6.0的控制台的中文为乱码
- Android技术资料汇集
- Mac 自带PHP 如何正常连接 PGSql ( 及编译 pgsql.so )
- Android最佳性能实践(二)——分析内存的使用情况
- Nagios--简单篇
- java简单的输入语句(字符串)
- Android EditText的设置
- JS+CSS实现大气的黑色首页导航菜单效果代码
- MyBase 笔记/知识库管理软件
- linux系统安装后优化
- linux系统安装后优化
- qemu,kvm,libvirt的使用
- Leetcode: Restore IP Addresses
- 标准模板库(STL)使用---pair