檢查應用程式日誌檔#
許多執行複雜處理、在背景運行或沒有控制台存取權限的程式,都會將操作記錄到檔案或專門的日誌收集設施。養成習慣,在調查失敗時首先檢查軟體的日誌檔。
日誌檔的位置#
不同作業系統和平台的日誌檔位置不同:
Unix 系統:通常存放在 /var/log 目錄中的文字檔
auth.log:認證相關daemon.log:背景程序kern.log:核心訊息debug:除錯資訊messages:其他訊息
Windows 系統:使用 Eventvwr.msc 啟動 Event Viewer,或使用 PowerShell 的 GetEventLog 命令
macOS:使用 Console 應用程式
在不太繁忙的系統上,可以在應用程式產生日誌後立即執行
ls -tl /var/log | head,最近修改的日誌檔會出現在最上面。
調整日誌詳細程度#
許多應用程式可以透過以下方式調整日誌詳細程度(log verbosity):
- 命令列選項
- 設定檔選項
- 在執行期發送特定信號
例如,SSH 連線除錯時,將 sshd_config 中的 LogLevel 從 INFO 改為 DEBUG,就能看到更詳細的訊息,如找不到 authorized_keys 檔案等明確的錯誤原因。
日誌框架設定#
Unix syslog:透過 /etc/syslog.conf 設定 facility 和 level 的對應關係
security.* /var/log/security
auth.info /var/log/auth.log
*.=debug /var/log/debug.log
*.emerg *Log4j(JVM 生態系):透過 XML、JSON、YAML 或 Java properties 檔案設定 loggers、appenders 和 layouts
分析日誌的方法#
- 使用系統的 GUI event viewer 搜尋和過濾
- 在編輯器中開啟日誌檔處理
- 使用 Unix 命令列工具(
grep、awk、sort等)過濾、摘要和選擇欄位 - 互動式監控日誌(如
tail -f) - 使用日誌管理服務,如 ELK、Logstash、loggly 或 Splunk
- Windows 上使用 wevtutil 命令列工具查詢和匯出日誌
分析策略#
- 從失敗發生的時間點附近開始檢查日誌條目
- 搜尋與失敗相關的字串(如失敗命令的名稱)
- 回溯搜尋錯誤、警告和異常條目
- 對於表象不明確的失敗,反覆從日誌中移除無關條目,直到重要資訊浮現
在編輯器中可以使用刪除匹配行的功能快速過濾日誌:Emacs 用
delete-matching-lines,Vim 用:g/pattern/d,或在命令列用連續的grep -v命令。
重點回顧#
- 調查失敗的應用程式時,首先檢查其日誌檔
- 提高應用程式的日誌詳細程度,以記錄失敗原因
- 設定並過濾日誌檔,以縮小問題範圍