使用 ChatGPT 碰到的坑
最近在使用 ChatGPT 的時候碰到一個小坑,因為某些特殊情況我需要使用 syslog 向 logbeat 中發送日志。
由于這是一個比較古老的協議,確實也沒接觸過,所以就想著讓 ChatGPT 幫我生成個例子。
原本我已經在 Go 中將這個流程跑通,所以其實只需要將代碼轉換為 Java 就可以了,這個我還是很信任 ChatGPT 的.
現在我挺多結構化數據的轉換都交給了 ChatGPT,省去了不少小工具。
于是便有了這段對話:
看起來挺正常的,我拿過來改改確實也能用。
直到快上線的時候,我發現一些元信息丟失了,比如日志生產者的 hostname, PID 等,然而這個信息在 Go 卻沒有丟失。
于是我反復調試了之前生成的代碼,依然沒有找到問題。
沒辦法,就只有去翻翻 Go 源碼,想看看最終發出去的數據長什么樣子,最后看到這樣幾行代碼:
這樣一看就很清晰了,只是按照 <%d>%s %s %s[%d]: %s%s 的格式將生成的字符串通過網絡發送出去。
既然這樣 Java 代碼也很好寫了:
Socket socket = new Socket(hostname,port);
socket.setKeepAlive(true);
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os, true);
String format = String.format("<%d>%s %s %s[%d]: %s%s", 6 , rfc3164DateFormat.format(new Date()), "test", "test", 0, message, "\n");
pw.println(format);
經過測試數據終于對了。
之后我就在想這么簡單的一個問題 Google 上不可能沒有吧,于是直接搜索了 Java syslog 關鍵字,結果直接就有一個現成的庫。
而且實現也是類似的。
我相信應該有不少朋友也有被 ChatGPT 一本正經的胡說八道誤導過,至少在當前的環境下一些簡單的東西我還是決定優先 Google。