| 14 | ) |
| 15 | |
| 16 | func main() { |
| 17 | |
| 18 | // 只需调用 `log` 包中的 `Println` 等函数即可使用 _标准_ logger。 |
| 19 | // 它已经预先配置为将日志输出到 `os.Stderr`。 |
| 20 | // 像 `Fatal*` 或 `Panic*` 这样的附加方法将在记录日志后退出程序。 |
| 21 | log.Println("standard logger") |
| 22 | |
| 23 | // 日志记录器可以使用 _flags_ 进行配置,以设置它们的输出格式。 |
| 24 | // 默认情况下,标准记录器已设置了 `log.Ldate` 和 `log.Ltime` 标志, |
| 25 | // 并将它们收集在 `log.LstdFlags` 中。 |
| 26 | // 我们可以更改其标志以发出微秒精度的时间,例如: |
| 27 | log.SetFlags(log.LstdFlags | log.Lmicroseconds) |
| 28 | log.Println("with micro") |
| 29 | |
| 30 | // 它还支持发出调用 log` 函数的文件名和行号。 |
| 31 | log.SetFlags(log.LstdFlags | log.Lshortfile) |
| 32 | log.Println("with file/line") |
| 33 | |
| 34 | // 可能会有用创建一个自定义记录器并在各处传递它。 |
| 35 | // 创建新记录器时,我们可以设置一个 _前缀_ 来区分其输出和其他日志记录器。 |
| 36 | mylog := log.New(os.Stdout, "my:", log.LstdFlags) |
| 37 | mylog.Println("from mylog") |
| 38 | |
| 39 | // 我们可以使用 `SetPrefix` 方法在现有的记录器(包括标准记录器)上设置前缀。 |
| 40 | mylog.SetPrefix("ohmy:") |
| 41 | mylog.Println("from mylog") |
| 42 | |
| 43 | // 日志记录器可以具有自定义的输出目标;任何 `io.Writer` 都可以使用。 |
| 44 | var buf bytes.Buffer |
| 45 | buflog := log.New(&buf, "buf:", log.LstdFlags) |
| 46 | |
| 47 | // 这个调用将日志输出写入到 `buf` 中. |
| 48 | buflog.Println("hello") |
| 49 | |
| 50 | // 这将实际上显示在标准输出上。 |
| 51 | fmt.Print("from buflog:", buf.String()) |
| 52 | |
| 53 | // `slog 包提供了 _结构化_ 的日志输出。例如,以 JSON 格式记录日志非常直接。 |
| 54 | jsonHandler := slog.NewJSONHandler(os.Stderr, nil) |
| 55 | myslog := slog.New(jsonHandler) |
| 56 | myslog.Info("hi there") |
| 57 | |
| 58 | // 除了 `msg` 之外,`slog` 输出还可以包含任意数量的键值对。 |
| 59 | myslog.Info("hello again", "key", "val", "age", 25) |
| 60 | } |