Files
docs/i18n/zh-tw/docusaurus-plugin-content-docs/version-1.23/administration/logging-config.md
T
appleboy dbfa0ba454 docs: add zh-tw folder (#195)
Signed-off-by: appleboy <[email protected]>
Reviewed-on: https://gitea.com/gitea/docs/pulls/195
Reviewed-by: Lunny Xiao <[email protected]>
Co-authored-by: appleboy <[email protected]>
Co-committed-by: appleboy <[email protected]>
2025-04-04 23:28:16 +00:00

264 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
date: "2019-04-02T17:06:00+01:00"
slug: "logging-config"
sidebar_position: 40
aliases:
- /zh-tw/logging-configuration
---
# 日誌配置
Gitea 的日誌配置主要包括 3 種組件:
- `[log]` 部分用於一般配置
- `[log.<mode-name>]` 部分用於配置不同的日誌寫入器以輸出日誌,即:“寫入模式”,模式名稱也用作“寫入器名稱”。
- `[log]` 部分還可以包含子日誌記錄器配置,遵循鍵模式 `logger.<logger-name>.<CONFIG-KEY>`
默認情況下有一個功能齊全的日誌輸出,因此不需要定義一個。
## 收集日誌以獲取幫助
要收集日誌以獲取幫助和問題報告,請參閱 [支持選項](help/support.md)。
## `[log]` 部分
Gitea 中的日誌設施配置發生在 `[log]` 部分及其子部分中。
在頂級 `[log]` 部分中可以放置以下配置:
- `ROOT_PATH`:(默認:**%(GITEA_WORK_DIR)/log**):日誌文件的基本路徑
- `MODE`:(默認:**console**)用於默認日誌記錄器的日誌輸出列表。
- `LEVEL`:(默認:**Info**)最不嚴重的日誌事件以持久化,大小寫不敏感。可能的值是:`Trace``Debug``Info``Warn``Error``Fatal`
- `STACKTRACE_LEVEL`:(默認:**None**)對於此級別及更嚴重的事件,將在記錄時打印堆棧跟蹤。
它可以包含以下子日誌記錄器:
- `logger.router.MODE`:(默認:**,**):用於路由器日誌記錄器的日誌輸出列表。
- `logger.access.MODE`:(默認:**_empty_**)用於訪問日誌記錄器的日誌輸出列表。默認情況下,訪問日誌記錄器被禁用。
- `logger.xorm.MODE`:(默認:**,**)用於 XORM 日誌記錄器的日誌輸出列表。
將逗號(`,`)設置為子日誌記錄器的模式意味著使其使用默認的全局 `MODE`
## 快速示例
### 默認(空)配置
空配置等同於默認:
```ini
[log]
ROOT_PATH = %(GITEA_WORK_DIR)/log
MODE = console
LEVEL = Info
STACKTRACE_LEVEL = None
logger.router.MODE = ,
logger.xorm.MODE = ,
logger.access.MODE =
; 這是“console”模式的配置選項(上面由 MODE=console 使用)
[log.console]
MODE = console
FLAGS = stdflags
PREFIX =
COLORIZE = true
```
這等同於將所有日誌發送到控制台,默認的 Golang 日誌也發送到控制台日誌。
這只是示例,這是默認值,不需要將其寫入配置文件中。
### 禁用路由器日誌並將一些訪問日誌記錄到文件中
禁用路由器日誌記錄器,訪問日誌(>=Warn)進入 `access.log`
```ini
[log]
logger.router.MODE =
logger.access.MODE = access-file
[log.access-file]
MODE = file
LEVEL = Warn
FILE_NAME = access.log
```
### 為不同模式設置不同的日誌級別
默認日誌(>=Warn)進入 `gitea.log`,而錯誤日誌進入 `file-error.log`
```ini
[log]
LEVEL = Warn
MODE = file, file-error
; 默認情況下,“file”模式將記錄日誌到 %(log.ROOT_PATH)/gitea.log,因此我們不需要設置它
; [log.file]
; 默認情況下,MODE(實際上是此日誌記錄器的輸出寫入器)取自部分名稱,因此我們也不需要設置它
; MODE = file
[log.file-error]
MODE = file
LEVEL = Error
FILE_NAME = file-error.log
```
## 日誌輸出(模式和寫入器)
Gitea 提供以下日誌輸出寫入器:
- `console` - 日誌記錄到 `stdout`(或如果在配置中設置,則記錄到 `stderr`
- `file` - 日誌記錄到文件
- `conn` - 日誌記錄到套接字(網絡或 unix)
### 通用配置
某些配置對所有日誌輸出模式都是通用的:
- `MODE` 是日誌輸出寫入器的模式。它將默認為 ini 部分中的模式名稱。因此 `[log.console]` 將默認為 `MODE = console`
- `LEVEL` 是此輸出的最低級別。
- `STACKTRACE_LEVEL` 是此輸出將打印堆棧跟蹤的最低級別。
- `COLORIZE` 將默認為 `true`,如描述的那樣,否則將默認為 `false`
#### `EXPRESSION`
`EXPRESSION` 代表日誌事件必須匹配的正則表達式,以便由輸出寫入器記錄。
日誌消息(去除顏色)必須匹配,或者 `longfilename:linenumber:functionname` 必須匹配。
注意:整個消息或字符串不需要完全匹配。
請注意,此表達式將在寫入器的 goroutine 中運行,但不在日誌事件 goroutine 中運行。
#### `FLAGS`
`FLAGS` 代表在每條消息之前打印的前置日誌上下文信息。它是一個逗號分隔的字符串集。值的順序無關緊要。
默認為 `stdflags`= `date,time,medfile,shortfuncname,levelinitial`
可能的值是:
- `none``,` - 無標誌。
- `date` - 當地時區的日期:`2009/01/23`
- `time` - 當地時區的時間:`01:23:23`
- `microseconds` - 微秒分辨率:`01:23:23.123123`。假設時間。
- `longfile` - 完整文件名和行號:`/a/b/c/d.go:23`
- `shortfile` - 最後的文件名元素和行號:`d.go:23`
- `funcname` - 調用者的函數名稱:`runtime.Caller()`
- `shortfuncname` - 函數名稱的最後部分。覆蓋 `funcname`
- `utc` - 如果設置了日期或時間,則使用 UTC 而不是當地時區。
- `levelinitial` - 括號中的提供級別的首字母,例如 `[I]` 表示信息。
- `level` - 括號中的級別 `[INFO]`
- `gopid` - 上下文的 Goroutine-PID。
- `medfile` - 文件名的最後 20 個字符 - 相當於 `shortfile,longfile`
- `stdflags` - 相當於 `date,time,medfile,shortfuncname,levelinitial`
### 控制台模式
在此模式下,日誌記錄器將轉發日誌消息到附加到 Gitea 進程的 stdout 和 stderr 流。
對於控制台模式的日誌記錄器,如果不是在 Windows 上,或者 Windows 終端可以設置為 ANSI 模式或是 cygwin 或 Msys 管道,則 `COLORIZE` 將默認為 `true`
設置:
- `STDERR`:**false**:日誌記錄器是否應打印到 `stderr` 而不是 `stdout`
### 文件模式
在此模式下,日誌記錄器將日誌消息保存到文件中。
設置:
- `FILE_NAME`:寫入日誌事件的文件,相對於 `ROOT_PATH`,默認為 `%(ROOT_PATH)/gitea.log`。例外:訪問日誌將默認為 `%(ROOT_PATH)/access.log`
- `MAX_SIZE_SHIFT`:**28**:單個文件的最大大小移位。28 代表 256Mb。詳細信息請參見下文。
- `LOG_ROTATE` **true**:是否旋轉日誌文件。TODO:如果為 false,是否會在每日旋轉時刪除,還是什麼都不做?。
- `DAILY_ROTATE`:**true**:是否每天旋轉日誌。
- `MAX_DAYS`:**7**:在此天數後刪除旋轉的日誌文件。
- `COMPRESS`**true**:是否默認使用 gzip 壓縮舊日誌文件。
- `COMPRESSION_LEVEL`:**-1**:壓縮級別。詳細信息請參見下文。
`MAX_SIZE_SHIFT` 定義了文件的最大大小,通過左移 1 給定的次數(`1 << x`)。
v1.17.3 時的確切行為可以在 [這裡](https://github.com/go-gitea/gitea/blob/v1.17.3/modules/setting/log.go#L185) 看到。
`COMPRESSION_LEVEL` 的有用值從 1(最佳速度)到 9(最佳壓縮)。也可以選擇 [DefaultCompression](https://pkg.go.dev/compress/gzip#pkg-constants)-1)和 [HuffmanOnly](https://pkg.go.dev/compress/flate#HuffmanOnly)-2)。
請注意,更好的壓縮可能會帶來更高的資源使用。
### 連接模式
在此模式下,日誌記錄器將通過網絡套接字發送日誌消息。
設置:
- `ADDR`:**:7020**:設置要連接的地址。
- `PROTOCOL`:**tcp**:設置協議,可以是“tcp”、“unix”或“udp”。
- `RECONNECT`:**false**:連接丟失時嘗試重新連接。
- `RECONNECT_ON_MSG`:**false**:為每條消息重新連接主機。
### “路由器”日誌記錄器
當 Gitea 的路由處理程序工作時,路由器日誌記錄器記錄以下消息類型:
- `started` 消息將在 TRACE 級別記錄
- `polling`/`completed` 路由將在 INFO 級別記錄。例外:“/assets” 靜態資源請求也在 TRACE 級別記錄。
- `slow` 路由將在 WARN 級別記錄
- `failed` 路由將在 WARN 級別記錄
### “XORM”日誌記錄器
要使 XORM 輸出 SQL 日誌,應在 `[database]` 部分中將 `LOG_SQL` 設置為 `true`
### “訪問”日誌記錄器
訪問日誌記錄器是 Gitea 1.9 以來的新日誌記錄器。它提供了符合 NCSA 通用日誌格式的日誌格式。它高度可配置,但更改其模板時應謹慎。此日誌記錄器的主要好處是 Gitea 現在可以以標準日誌格式記錄訪問,因此可以使用標準工具。
您可以使用 `logger.access.MODE = ...` 啟用此日誌記錄器。
如果需要,可以通過更改 `ACCESS_LOG_TEMPLATE` 的值來更改訪問日誌記錄器的格式。
請注意,訪問日誌記錄器將在 `INFO` 級別記錄,將此日誌記錄器的 `LEVEL` 設置為 `WARN` 或更高將導致沒有訪問日誌。
#### ACCESS_LOG_TEMPLATE
此值代表一個 go 模板。其默認值為
```tmpl
{{.Ctx.RemoteHost}} - {{.Identity}} {{.Start.Format "[02/Jan/2006:15:04:05 -0700]" }} "{{.Ctx.Req.Method}} {{.Ctx.Req.URL.RequestURI}} {{.Ctx.Req.Proto}}" {{.ResponseWriter.Status}} {{.ResponseWriter.Size}} "{{.Ctx.Req.Referer}}" "{{.Ctx.Req.UserAgent}}"`
```
模板傳遞以下選項:
- `Ctx``context.Context`
- `Identity``SignedUserName``"-"` 如果用戶未登錄
- `Start` 是請求的開始時間
- `ResponseWriter``http.ResponseWriter`
更改此模板時必須謹慎,因為它在標準的恐慌恢復陷阱之外運行。模板應該盡可能簡單,因為它在每個請求中運行。
## 釋放和重新打開、暫停和恢復日誌記錄
如果您在 Unix 上運行,您可能希望釋放和重新打開日誌以使用 `logrotate` 或其他工具。
可以通過向運行的進程發送 `SIGUSR1`,或運行 `gitea manager logging release-and-reopen` 強制 Gitea 釋放並重新打開其日誌文件和連接。
或者,您可能希望暫停和恢復日誌記錄 - 這可以通過使用 `gitea manager logging pause``gitea manager logging resume` 命令來完成。請注意,暫停日誌記錄時,INFO 級別以下的日誌事件將不會存儲,僅存儲有限數量的事件。日誌記錄可能會暫時阻塞,暫停時會顯著減慢 Gitea 的速度 - 因此建議僅在非常短的時間內暫停。
## 在 Gitea 運行時添加和刪除日誌記錄
可以使用 `gitea manager logging add``remove` 子命令在 Gitea 運行時添加和刪除日誌記錄。
此功能只能調整運行中的日誌系統,無法用於啟動訪問或路由器日誌記錄器,如果它們尚未初始化。如果您希望啟動這些系統,建議調整 app.ini 並(優雅地)重新啟動 Gitea 服務。
這些命令的主要目的是在運行系統上輕鬆添加臨時日誌記錄器,以調查問題,重新啟動可能會導致問題消失。
## 使用 `logrotate` 而不是內置日誌輪換
Gitea 包含內置日誌輪換,這應該足以滿足大多數部署需求。但是,如果您希望使用 `logrotate` 實用程序:
- 通過在 `app.ini` 中將 `LOG_ROTATE` 設置為 `false` 禁用內置日誌輪換。
- 安裝 `logrotate`
- 配置 `logrotate` 以匹配您的部署要求,請參閱 `man 8 logrotate` 以了解配置語法詳細信息。
`postrotate/endscript` 塊中,通過 `kill -USR1``kill -10``gitea` 進程本身發送 `USR1` 信號,或運行 `gitea manager logging release-and-reopen`(使用適當的環境)。
確保您的配置適用於 Gitea 日誌記錄器發出的所有文件,如上述部分所述。
- 始終使用 `logrotate /etc/logrotate.conf --debug` 測試您的配置。
- 如果您使用 docker 並從容器外部運行,您可以使用
`docker exec -u $OS_USER $CONTAINER_NAME sh -c 'gitea manager logging release-and-reopen'`
`docker exec $CONTAINER_NAME sh -c '/bin/s6-svc -1 /etc/s6/gitea/'` 或直接向 Gitea 進程本身發送 `USR1`
下一個 `logrotate` 任務將包括您的配置,因此不需要重新啟動。
您也可以使用 `logrotate /etc/logrotate.conf --force` 立即重新加載 `logrotate`