使用 ChatGPT 碰到的坑
最近在使用 ChatGPT 的時(shí)候碰到一個(gè)小坑,因?yàn)槟承┨厥馇闆r我需要使用 syslog 向 logbeat 中發(fā)送日志。
由于這是一個(gè)比較古老的協(xié)議,確實(shí)也沒接觸過,所以就想著讓 ChatGPT 幫我生成個(gè)例子。
原本我已經(jīng)在 Go 中將這個(gè)流程跑通,所以其實(shí)只需要將代碼轉(zhuǎn)換為 Java 就可以了,這個(gè)我還是很信任 ChatGPT 的.
現(xiàn)在我挺多結(jié)構(gòu)化數(shù)據(jù)的轉(zhuǎn)換都交給了 ChatGPT,省去了不少小工具。
于是便有了這段對(duì)話:
看起來挺正常的,我拿過來改改確實(shí)也能用。
直到快上線的時(shí)候,我發(fā)現(xiàn)一些元信息丟失了,比如日志生產(chǎn)者的 hostname, PID 等,然而這個(gè)信息在 Go 卻沒有丟失。
于是我反復(fù)調(diào)試了之前生成的代碼,依然沒有找到問題。
沒辦法,就只有去翻翻 Go 源碼,想看看最終發(fā)出去的數(shù)據(jù)長(zhǎng)什么樣子,最后看到這樣幾行代碼:
這樣一看就很清晰了,只是按照 <%d>%s %s %s[%d]: %s%s 的格式將生成的字符串通過網(wǎng)絡(luò)發(fā)送出去。
既然這樣 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);
經(jīng)過測(cè)試數(shù)據(jù)終于對(duì)了。
之后我就在想這么簡(jiǎn)單的一個(gè)問題 Google 上不可能沒有吧,于是直接搜索了 Java syslog 關(guān)鍵字,結(jié)果直接就有一個(gè)現(xiàn)成的庫(kù)。
而且實(shí)現(xiàn)也是類似的。
我相信應(yīng)該有不少朋友也有被 ChatGPT 一本正經(jīng)的胡說八道誤導(dǎo)過,至少在當(dāng)前的環(huán)境下一些簡(jiǎn)單的東西我還是決定優(yōu)先 Google。