SysLog简介和java操作实例

什么是SysLog

syslog协议属于一种主从式协议:syslog发送端会传送出一个小的文字讯息(小于1024字节)到syslog接收端。接收端通常名为“syslogd”、“syslog daemon”或syslog服务器。系统日志讯息可以被以UDP协议及╱或TCP协议来传送。这些资料是以明码型态被传送。不过由于SSL加密外套(例如Stunnel、sslio或sslwrap等)并非syslog协议本身的一部分,因此可以被用来透过SSL/TLS方式提供一层加密。
syslog通常被用于资讯系统管理及资安稽核。虽然它有不少缺陷,但仍获得相当多的装置及各种平台的接收端支援。因此syslog能被用来将来自许多不同类型系统的日志记录整合到集中的储存库中。
syslog提供了一个便于管理员理解日志的机制,即以英文文本来记录系统消息。系统日志消息中有标准格式的消息(称为系统日志消息、系统错误消息或简单系统消息),也有从调试命令输出的消息。这些消息是在网络运作过程中生成的,旨在指明网络问题的类型和严重程度,或者帮助读者用户检测路由器的活动,比如配置的变更。
Cisco设备会根据网络事件导致的结果,来生成系统日志消息。每个syslog消息中都包含一个严重级别和一个特性。很多网络设备都支持syslog其中包括路由器、交换机、应用服务器、防火墙和其他网络设备。
Syslog 常被称为系统日志或系统记录,是一种用来在互联网协议(TCP/IP)的网络中传递记录档讯息的标准。这个词汇常用来指实际的syslog 协议,或者那些送出syslog讯息的应用程式或数据库。

通俗一点的讲,syslog就是日志发送和接受的一种协议,你可以使用syslog协议实现自己的应用,将日志通过syslog协议从日志生产者发送到日志消费者,消费者保存日志信息,提供日志查询和管理。


  • SysLog的作用


首先和大家解释一下,为什么要使用syslog。或许大家有这样的疑问,我们平时做的每一个系统不都有自己的日志模块吗?我们登录自己的日志模块,可以很方便的查看自己的日志信息。那么为什么还要使用syslog呢?

答案是这样的,如果只是针对一个系统,我们一般是没有必要使用syslog的,如果一个企业部署了很多系统,每个系统都有自己的日志模块,每个系统都是独立的。那么管理员要想通过日志获取到系统的运行信息或者审计日志,那么工作量是相当大的。这个时候,只有要求所有的系统都将日志传输到syslog服务器上,通过syslog服务器统一管理日志,就会方便很多。

当然这些系统包括所有的硬件,软件系统,他们都会源源不断的发来信息,由syslog服务器将信息分类,分级别记录。


  • Java如何连接开发SysLog应用

java开发syslog,一般都是开发客户端,服务器都是使用的第三方应用。它们已经给我们做好了syslog收集日志的部分,我们只需要安装就可以了。

开发前准备工作:

安装一个syslog服务器:syslogwatcher

下载地址:http://pan.baidu.com/s/1dDlEEvJ

下载完成以后,直接运行exe就行。

启动以后,托盘中就会有一个图标,单击进入syslogwatcher。第一次使用的时候,需要设置编码为utf-8。这样兼容中文日志。

可以通过ListenStop控制是否开启监听


这样就开启了服务端,下面编写客户端程序:

java客户端开发需要引入:syslog4j.jar包。

下载地址:http://pan.baidu.com/s/1qW6qYo0

下载以后引入到项目中,编写代码实例如下:

import java.net.URLDecoder;

import java.util.Date;


import org.productivity.java.syslog4j.Syslog;

import org.productivity.java.syslog4j.SyslogIF;


/**

* SysLog发送数据

* @author lish

* date 2014年8月1日 上午11:02:06

* class name SyslogTest2

*/

public class SyslogTest2 {


public static void main(String[] args){

try {

//获取syslog的操作类,使用udp协议。syslog支持"udp", "tcp", "unix_syslog", "unix_socket"协议

SyslogIF syslog = Syslog.getInstance("udp");

//设置syslog服务器端地址

syslog.getConfig().setHost("127.0.0.1");

//设置syslog接收端口,默认514

syslog.getConfig().setPort(514);

//拼接syslog日志,这个日志是自己定义的,通常我们定义成符合公司规范的格式就行,方便查询。例如 操作时间:2014年8月1日 操作者ID:张三 等。信息就是一个字符串。

StringBuffer buffer = new StringBuffer();

buffer.append("操作时间:" + new Date().toString().substring(4, 20) + ";");

buffer.append("操作者ID:" + "张三" + ";");

buffer.append("操作时间:" + new Date()+ ";");

buffer.append("日志类别:" + "22"+ ";");

buffer.append("执行动作:" + "动作" + ";");

buffer.append("备注:" + "备注");

/* 发送信息到服务器,2表示日志级别 范围为0~7的数字编码,表示了事件的严重程度。0最高,7最低

* syslog为每个事件赋予几个不同的优先级:

LOG_EMERG:紧急情况,需要立即通知技术人员。

LOG_ALERT:应该被立即改正的问题,如系统数据库被破坏,ISP连接丢失。

LOG_CRIT:重要情况,如硬盘错误,备用连接丢失。

LOG_ERR:错误,不是非常紧急,在一定时间内修复即可。

LOG_WARNING:警告信息,不是错误,比如系统磁盘使用了85%等。

LOG_NOTICE:不是错误情况,也不需要立即处理。

LOG_INFO:情报信息,正常的系统消息,比如骚扰报告,带宽数据等,不需要处理。

LOG_DEBUG:包含详细的开发情报的信息,通常只在调试一个程序时使用。

*/

syslog.log(0, URLDecoder.decode(buffer.toString(),"utf-8"));

} catch (Exception e) {

}

}

}

服务器记录信息如图:

这样,只要要求所有的系统都向服务器发送日志信息,管理员就可以通过syslog服务器查询所有的日志信息。而且可以通过日志信息的级别来确定具体的应对措施。syslog服务器还可以制作一些报表,直观的查看日志信息

到这里,你就初步掌握了syslog的应用方法了,syslog还可以监控Linuxunixwindow等服务器的日志信息,这样通过syslog还可以实时的得到服务器运行状况。如果有兴趣的还可以深入了解。总之,这么简单就能统一日志管理,何乐而不为呢?

### 如何在Java中实现SysLog功能 #### Syslog简介 Syslog是一种标准的网络协议,用于将计算机系统生成的日志消息发送到集中式的日志管理系统。这种机制允许不同设备服务将其日志信息统一收集管理[^2]。 #### 使用Syslog4j库实现Syslog客户端 为了简化开发过程并提高效率,可以利用第三方库如`syslog4j`来快速构建支持Syslog协议的应用程序。该库提供了一个名为`SyslogMain`的类作为入口点,并附带详细的使用案例说明文档[^1]。 下面是一个基于`syslog4j`的例子,展示了怎样配置以及向远程服务器发送一条INFO级别的日志: ```java import org.productivity.java.syslog4j.Syslog; import org.productivity.java.syslog4j.impl.net.tcp.TCPNetSyslog; public class SimpleSyslogExample { public static void main(String[] args) throws Exception{ TCPNetSyslog tcpNetSyslog = (TCPNetSyslog) Syslog.getInstance("tcp"); // 设置目标地址与端口 tcpNetSyslog.getConfig().setHost("localhost"); tcpNetSyslog.getConfig().setPort(514); String message = "This is a test log entry."; tcpNetSyslog.log(Syslog.LEVEL_INFO, message); System.out.println("Sent syslog message."); } } ``` 这段代码创建了一个TCP连接类型的Syslog实例,并指定了要连接的目标主机(这里是本地机器)及其监听端口号;接着通过调用`log()`函数发出了一条带有特定优先级的消息给指定的目的地[^3]。 需要注意的是,在实际应用环境中应当根据实际情况调整参数设置,比如更改目的IP地址、端口以及其他必要的选项以适应具体需求。 另外值得注意的一点是在某些情况下可能需要考虑字符编码问题,尤其是在处理来自不同源的数据时。上述例子中的字符串传递前进行了URL解码操作,这取决于所处的具体应用场景。 对于更复杂的项目结构或是希望集成更多特性的开发者来说,则可以选择其他更为成熟的解决方案,例如结合Apache Log4j 2框架下的自定义Appender来进行更加精细的日志管理分发工作[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值