在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java  網(wǎng)絡(luò)安全/ Graylog2以UDP形式存儲GELF格式的json時無法存儲中文

Graylog2以UDP形式存儲GELF格式的json時無法存儲中文

想用graylog存系統(tǒng)的登陸日志,java代碼如下:

private static void send(String host, int port, Map<String, Object> params) throws Exception {
    if (SOCKET == null) {
        SOCKET = new DatagramSocket();
    }
    InetAddress address = InetAddress.getByName(host);
    String content = JSON.toJSONString(params);
    DatagramPacket packet = new DatagramPacket(content.getBytes("UTF-8"), content.length(), address, port);
    SOCKET.send(packet);
}

其中content字符串如下:

{
  "version":"1.1",
  "host":"test.com",
  "short_message":"loginLog",
  "full_message":"loginLog",
  "_name":"測試",
  "_result":"SUCCESS:登陸成功",
  "_user_id":"f69cf0a3-ad33-4b7f-b770-ea18d615f6a1",
  "_username":"test",
  "_ip":"192.168.1.33"
}

經(jīng)過反復(fù)測試,發(fā)下一旦字段中包含了中文,就無法存儲成功,但是Graylog的文檔中關(guān)于GELF的描述如下:

  • _[additional field] string (UTF-8) or number

every field you send and prefix with an underscore (_) will be treated as an additional field. Allowed characters in field names are any word character (letter, number, underscore), dashes and dots. The verifying regular expression is: ^[w.-]*$. Libraries SHOULD not allow to send id as additional field (_id). Graylog server nodes omit this field automatically.

即使用utf-8編碼即可。

反復(fù)嘗試仍然解決不了,前來求助。
望各路大佬給點建議,萬分感謝!

回答
編輯回答
初心

解決了。。 非常蠢的錯誤,只需把java代碼改為如下:

private static void send(String host, int port, Map<String, Object> params) throws Exception {
    if (SOCKET == null) {
        SOCKET = new DatagramSocket();
    }
    InetAddress address = InetAddress.getByName(host);
    String content = JSON.toJSONString(params);
    byte[] bytes = content.getBytes("UTF-8");
    DatagramPacket packet = new DatagramPacket(bytes, bytes.length, address, port);
    SOCKET.send(packet);
}

所以問題就在于包含中文的byte[]長度和之前的字符串并不相同。。

2018年8月24日 15:29