## 日志处理
orange 框架中有一个专门处理日志的包,通过使用日志包进行日志处理;
在配置文件中可以进行日志相关配置;
- 功能上满足绝大多数日志需求,类似zap风格输出;
- 代码逻辑更加精简,性能高;
下图是在同一台机器上进行的压测对比,可以见得 orange 框架内置日志性能要优于zap;
![](https://img.kancloud.cn/88/d4/88d4cce12f86db9178795d2da03fdf67_500x212.jpg)
## 日志配置
配置文件中默认日志配置如下:
- 日志级别包含 DEBUG,INFO,NOTICE, WARNING,ERROR, CRITICAL,日志级别依次递增,当配置指定级别后,则只会输出大于等于当前级别的日志信息;
- 日志类型 有两种 text 和 json 分别对应 json 日志类型和 文本日志类型;
- 日志路径,这里注意填写一个目录地址,默认日志会在当前配置的目录中生成;
- 日志存储支持定时同步,防止日志写入过快导致的系统开销,syncInterval的单位是**毫秒** syncInterval = 0 则实时同;步日志到日志文件 ,syncInterval = 500 则会将日志暂存到 buffer 中,每间隔 500ms 的时间将日志数据同步到日志文件。
```
[app.logger]
level = "INFO" // 日志级别
type = "text" // 类型
path = "" // 日志存储目录,留空则日志会输出到控制台
syncInterval = 500 // 日志同步时间间隔 (单位:毫秒)
```
## 快速使用
> 日志记录方法参数和 fmt.Sprintf() 一样,第一个参数是格式化内容,可以包含 %s,%d,%v 等通配符,后面的参数则是具体需要替换的数据;
> 日志默认会存储在配置的目录下,日志文件名是 default.log
一般在程序中我们使用如下的方式记录日志:
格式化模式:
~~~
logger.Info("this is a Infolog %v", info)
logger.Error("this is a Errorlog %v", err)
logger.Warning("this is a Warning log %v", warn)
~~~
类似zap字段模式
~~~
logger.Infow("this is a Infolog", "info", "info value")
logger.Errorw("this is a Errorlog", "err", "err value")
logger.Warningw("this is a Warning log", "warn", "warn value")
~~~
## 独立日志
> 有时如果希望对指定业务进行单独的日志文件存储,可以使用 LogFile() 方法进行链式操作处理;
~~~
// 此方法会将日志文件记录在配置目录下的 api.log 文件中
logger.LogFile("api").Error("error logs %d", err)
~~~
## 日志效果
![](https://img.kancloud.cn/b3/91/b3917cf2543fb677d7de08a2438be207_865x167.png)