maven依赖
<dependency>
<groupId>org.graylog2</groupId>
<artifactId>syslog4j</artifactId>
<version>0.9.60</version>
</dependency>
<dependency>
<groupId>com.vaadin.external.google</groupId>
<artifactId>android-json</artifactId>
<version>0.0.20131108.vaadin1</version>
<scope>compile</scope>
</dependency>
示例代码
package com.example.demoLog4j2.logging;
import org.graylog2.syslog4j.Syslog;
import org.graylog2.syslog4j.SyslogConstants;
import org.graylog2.syslog4j.SyslogIF;
import org.json.JSONException;
import org.json.JSONObject;
import java.net.URLDecoder;
import java.util.Date;
public class SysLogSender {
private static final String ENC = "utf-8";
private static final String HOST = "192.168.88.134";
private static final int PORT = 514;
public static void main(String[] args) throws JSONException {
new SysLogSender().send(System.currentTimeMillis() + "", "这是一条测试日志");
}
public void send(String traceId, String msg) {
SyslogIF syslog = Syslog.getInstance(SyslogConstants.UDP);
syslog.getConfig().setHost(HOST);
syslog.getConfig().setPort(PORT);
syslog.getConfig().setSendLocalName(true);//携带本机主机名
try {
JSONObject jsonObject = new JSONObject();
jsonObject.put("traceId", traceId);
jsonObject.put("time", new Date().toString().substring(4, 20));
jsonObject.put("message", msg);
jsonObject.put("level", 0);
syslog.log(0, URLDecoder.decode(jsonObject.toString(), ENC));
jsonObject.put("level", 1);
syslog.log(1, URLDecoder.decode(jsonObject.toString(), ENC));
jsonObject.put("level", null);
jsonObject.put("type", "info");
syslog.info(URLDecoder.decode(jsonObject.toString(), ENC));
jsonObject.put("type", "error");
syslog.error(URLDecoder.decode(jsonObject.toString(), ENC));
jsonObject.put("type", "warn");
syslog.warn(URLDecoder.decode(jsonObject.toString(), ENC));
} catch (Exception e) {
System.out.println("send exception " + e.getMessage());
}
}
/* syslog.log——发送信息到服务器,数字表示日志级别 范围为0~7的数字编码,表示了事件的严重程度。0最高,7最低
* syslog为每个事件赋予几个不同的优先级:
0 LOG_EMERG:紧急情况,需要立即通知技术人员。
1 LOG_ALERT:应该被立即改正的问题,如系统数据库被破坏,ISP连接丢失。
2 LOG_CRIT:重要情况,如硬盘错误,备用连接丢失。
3 LOG_ERR:错误,不是非常紧急,在一定时间内修复即可。
4 LOG_WARNING:警告信息,不是错误,比如系统磁盘使用了85%等。
5 LOG_NOTICE:不是错误情况,也不需要立即处理。
6 LOG_INFO:情报信息,正常的系统消息,比如骚扰报告,带宽数据等,不需要处理。
7 LOG_DEBUG:包含详细的开发情报的信息,通常只在调试一个程序时使用。
*/
}
执行完成后,在server端查看效果,server端需打开UDP 514端口,若无其他额外配置(例如模板等),日志将会直接打印到/var/log/messages中。
[root@localhost ~]# tail -f /var/log/messages
Message from syslogd@zyyddat Jul 15 01:40:36 ...
{"traceId":"1626338437509","level":0,"time":"Jul 15 16:40:37 ","message":"这是一条测试日志"}
Jul 15 16:40:37 zyydd {"traceId": "1626338437509","level":0,"time":"Jul 15 16:40:37 ","message":"这是一条测试日志"}
Jul 15 16:40:37 zyydd {"traceId": "1626338437509","level":1,"time":"Jul 15 16:40:37 ","message":"这是一条测试日志"}
Jul 15 16:40:37 zyydd {"traceId": "1626338437509","time":"Jul 15 16:40:37 ","message":"这是一条测试日志","type":"info"}
Jul 15 16:40:37 zyydd {"traceId": "1626338437509","time":"Jul 15 16:40:37 ","message":"这是一条测试日志","type":"error"}
Jul 15 16:40:37 zyydd {"traceId": "1626338437509","time":"Jul 15 16:40:37 ","message":"这是一条测试日志","type":"warn"}