我的小網(wǎng)站被"薅禿"了,用 Trae 五 分鐘給網(wǎng)站增加日志功能,揪出爬蟲!
最近我發(fā)現(xiàn)自己用 Express 搭建的網(wǎng)站突然響應(yīng)變慢,服務(wù)器負(fù)載莫名其妙地升高。一開始我還以為是代碼優(yōu)化問題,但看了幾天后隱約感覺不對勁——流量突然暴增,但 uv 并沒有明顯增長。
這種情況顯然是遭遇了異常訪問,要么是人為高頻刷新,要么是爬蟲抓取。
問題是,這個網(wǎng)站最初只是為了學(xué)習(xí) Node.js 搭建的,為了簡化維護,一直沒有記錄訪問日志,導(dǎo)致現(xiàn)在無法追溯問題。但遇到這種情況,只能緊急添加日志功能,才能揪出背后的“始作俑者”。
一、Trae:救急神器登場
之前嘗試過幾款 AI 編程工具,但總會遇到各種限制,要么網(wǎng)絡(luò)問題,要么額度太少不夠用。
最近體驗了字節(jié)出品的國產(chǎn) AI IDE——Trae,主打AI 編程輔助。除了內(nèi)置 deepseek R1、V3、v3-0324 和 doubao1.5pro,同時支持自定義模型,最重要的是免費。本周又有大功能更新,支持了 MCP 和自定義智能體。
本文記錄下我是如何用它快速給 Express 應(yīng)用集成日志系統(tǒng),替代手動查閱 morgan 文檔的過程。
二、實戰(zhàn):逐步完善Express日志功能
步驟一:快速添加基礎(chǔ)日志
先不管三七二十一,把最基礎(chǔ)的請求日志加上,至少能在控制臺看到是誰在訪問了。
打開項目中的 app.js 文件,然后在 Trae 的 AI 面板里輸入:
加上日志中間件
不到2秒,Trae 就理解了我的需求,并給出了解決方案:
首先提示需要安裝 morgan,點擊"運行",Trae 直接就幫我安裝了 morgan,甚至不需要手動 npm install,這真的驚訝到我了。
研究后發(fā)現(xiàn),Trae 的智能體功能默認(rèn)啟用了 @Builder 模式。這個模式內(nèi)置了完整的文件系統(tǒng)和終端環(huán)境,所以能直接執(zhí)行 npm 命令。
回到正題,在幫我安裝 morgan 后,Trae 繼續(xù)生成了引入和使用 morgan 的代碼:
點擊"全部接受"后,代碼就立刻應(yīng)用到了文件中。運行應(yīng)用后,每次有訪問請求,控制臺就會輸出類似這樣的日志:
基礎(chǔ)日志有了,確實比我自己去翻文檔快多了!但是,控制臺日志不太方便分析,而且服務(wù)器一重啟就沒了。
步驟二:持久化到文件并實現(xiàn)日志輪換
接下來,我想把日志存到文件里,而且最好能按天分割,避免單個日志文件無限增大。
在此之前,我希望 Trae 生成的代碼能符合我的個人風(fēng)格,于是給它制定了一份規(guī)則:
再次提問,并且使用 #+能力名稱調(diào)用了 Trae 上下文能力:聯(lián)網(wǎng)搜索。
Trae分析了我的需求,建議使用 rotating-file-stream 庫來實現(xiàn)日志輪換:
我當(dāng)然選擇接受建議:
重新運行應(yīng)用,發(fā)現(xiàn)在 logs 目錄下自動生成了 access.log 文件,而且日志內(nèi)容比 console 格式更詳細(xì),包含了訪問時間、HTTP 方法、URL、狀態(tài)碼、響應(yīng)時間等信息。這下我就能隨時查看歷史訪問記錄了!
步驟三:區(qū)分訪問日志和錯誤日志
混在一起的日志看起來有點亂,我希望能把正常訪問和錯誤請求分開記錄,方便排查問題。
Trae 的上下文能力真的很好用:
修改 morgan 配置,讓 2xx/3xx 的成功請求日志寫入 'access.log',而4xx/5xx 的錯誤請求日志寫入 'error.log' ,兩個日志都需要按天輪換 #Web
Trae理解了需求,給出了非常完善的方案:
這個方案考慮得相當(dāng)周全,我測試了一下,分別訪問了正常頁面和不存在的頁面,果然日志被正確地分別記錄到了不同文件中。
步驟四:優(yōu)化寫入性能
既然我的網(wǎng)站可能面臨大量訪問,頻繁寫入日志可能會影響性能。我要求 Trae 幫我加上緩沖:
加上寫入間隔來緩沖日志寫入 #Web
Trae 給出了相關(guān)代碼:
通過這些代碼,日志會先緩存在內(nèi)存中,然后每隔 5 秒才會寫入磁盤,能有效減輕頻繁 I/O 操作帶來的性能壓力,提高日志寫入效率。
三、代碼的提交
回過頭看,從加第一行日志到實現(xiàn)文件輪換、錯誤分離,我驚訝地發(fā)現(xiàn),自己幾乎沒怎么手寫代碼,大部分時候是在和 AI 對話、確認(rèn)、然后點擊“運行”、“全部接受”。連安裝依賴庫的命令都是 Trae 直接提供的,基本沒怎么用到終端操作。這智能體自動化程度確實有點東西。
而且,這還只是用了 Trae 內(nèi)置的通用 Agent。對于更復(fù)雜或個性化的場景,Trae 也提供了強大的自定義智能體功能。可以根據(jù)自己的使用場景和目標(biāo),通過 MCP (Model Context Protocol) 賦予智能體調(diào)用各種專屬外部資源的能力,真正精細(xì)化地打磨 AI 的能力邊界,讓它變成你特定工作流中的專家。
既然如此,干脆就把代碼提交的任務(wù)也交給它。
使用 @ 喚出智能體,在彈出的選項中選擇 “創(chuàng)建智能體”,Trae 會進入創(chuàng)建智能體也沒,這里我輸入了名稱 Git:
接下來就是給這個 Git 智能體擴展能力了,點擊 “創(chuàng)建 MCP Servers” 就可以進入 MCP 市場了,在這里,我選擇了 Github:
輸入從 Github 獲得的 Token 后就能在 MCP Servers 看到這個 MCP 了:
接下來回到自定義智能體頁面,勾選之前添加的 Github MCP Server,點擊 “創(chuàng)建”即可使用 Git 智能體了:
使用自定義智能體和之前一樣,@ 即可:
至此,提交代碼的操作也完美的不需要手寫代碼就能完成了。
四、揪出"元兇"
好了,日志系統(tǒng)完善了!經(jīng)過幾天的運行,我終于通過分析 access.log 和 error.log 發(fā)現(xiàn)了問題所在:部分是國外的垃圾蜘蛛不遵守 robots.txt 協(xié)議,短時間內(nèi)頻繁爬取網(wǎng)站,甚至在服務(wù)器返回 429 之后還在訪問,已經(jīng)全都丟 nginx 屏蔽了。還有幾個固定 IP 也是短時間內(nèi)頻繁訪問,而且請求模式非常規(guī)律,基本可以確定是爬蟲了。
接下來就是針對性地做一些防護措施,比如添加速率限制、IP 黑名單等,不過具體的反爬策略就不展開了,防止被反反爬,重點是日志幫我定位了問題源頭。
五、Trae:真 AI 工程師的實力
這次用 Trae IDE 來給 Express 應(yīng)用加日志功能,整個體驗下來效率提升非常明顯。從最基礎(chǔ)的需求到逐步完善的過程中,AI都能給出準(zhǔn)確的代碼建議和完整的解決方案。
特別喜歡它的智能體(@Agent)對話模式和上下文理解能力,可以直接針對我的代碼提問和修改,比單純地復(fù)制粘貼代碼片段要智能得多。它能理解我當(dāng)前的代碼結(jié)構(gòu),并基于此給出恰當(dāng)?shù)慕ㄗh。
對于像我這樣偶爾寫寫后端的開發(fā)者來說,可以快速實現(xiàn)功能而不必花太多時間查文檔;對于專業(yè)的開發(fā)者,它也能在方案調(diào)研、代碼重構(gòu)、處理復(fù)雜配置時提供很大幫助。比如通過#Web搜索最新的庫用法,或者通過自定義 Agent、配置Rules 來統(tǒng)一規(guī)范等,都能節(jié)省不少時間。
不知道是運氣好 Trae 強大,這次 AI 給的代碼都不需要微調(diào)一下就能完美符合我的項目,大大減少了查文檔和寫樣板代碼的時間。
對了,以前用過 MarsCode 編程助手的朋友注意了,現(xiàn)在它更名為 Trae 插件了,用 Vscode 的同學(xué)也可以直接搜索 Trae 安裝。
六、結(jié)語
總的來說,Trae IDE 是一個值得開發(fā)者嘗試的 AI 編程助手,就我個人而言,它非常值得使用。
感興趣的朋友可以去官網(wǎng) https://sourl.cn/ymmfvS 下載體驗一下,是完全免費的。