# 配置
## 介绍
orange 框架中采用 TOML 格式配置,TOML 被设计成可以无歧义地被映射为哈希表,从而可以很容易地被解析成各种语言中的数据结构。
## 规范
* TOML 文档是大小写敏感的;
* TOML 文档必须是一个有效的 `UTF-8` 编码的 `Unicode` 文档;
* 空白符只能是制表符(`0x09`)或空格(`0x20`);
* 换行符只能是 LF(`0x0A`)或 CRLF (`0x0D0A`)。
## 默认配置说明
```
[app]
name = "orange" #应用名称
key = "be5356716b937d94eae948f102a2074f" #应用密钥,用户cookie,session等加密
httpAddr = "127.0.0.1" #http服务绑定ip
httpPort = 8088 #http服务绑定端口
accessLog = true #是否开启请求日志(类似nginx的access_log)
accessLogIgnore = ["/"] # 忽略记录access_log日志的路由,通常用户排除一些健康检查产生的日志
maxBody = 2096157 #http服务请求body最大值
csrfVerify = false # 是否开启csrf校验
configStatic = false # 静态配置文件,如果为true则框架不会开启配置热加载
pidfile = "./storage/orange.pid" # pid文件存储位置,程序启动会生成一个 pid 文件管理 pid 信息
maxWaitSecond = 120 # 进程推出后最大等待时间,框架可对指定执行操作进行等待完成后再推出
[app.logger]
level = "INFO" # 日志级别
type = "text" # 日志类型 'text' 或 ‘json’
path = "" #日志存储路径,注意这里是一个目录地址 空则输出到控制台 stdlog
syncInterval = 2 # 日志采用buffer写入,延时写入,配置0则实时写入
[app.session]
isOpen = true #是否开启session
driver = "cookie" # session存储驱动 cookie 或 redis
timeout = 1800 #session超时时间 单位:秒
[app.upload]
storage = "./storage/allimg" #默认文件上传路径
maxSize = 2096157 #默认文件上传大小限制,应小于maxBody
ext = ["jpg"] #默认上传文件格式
[database]
initCap = 2 #数据库连接池 初始化连接数
maxCap = 5 #数据库连接池 最大连接数,超过次数后连接则实时生成实时关闭,类似php短链接
idleTimeout = 5 # 连接空闲释放时间
debug = true # 是否开启debug,可显示mysql执行的sql语句
[database.mysql]
[database.mysql.default] #mysql配置,可以配置多个,默认名称default
addr = "192.168.137.100:3306"
username = "root"
password = "123456"
dbname = "weixin"
[database.redis]
[database.redis.default] #redis配置,可以配置多个,默认名称default
addr = "192.168.137.100:6379"
password = ""
dbnum = 5
```
## 获取配置
根据框架内置方法可以获取不同类型格式的配置信息,具体如下所示
```
// 获取字符类型配置
cfg.GetString("app.name", "default")
// 获取数字类型配置
cfg.GetInt("app.name", 0)
// 获取bool类型配置
cfg.GetBool("app.name", 0)
```
上述简单的配置结构如无法满足你的使用需求,框架还支持将配置解析到结构体。
```
// 定义一个结构体,结构体名称别名通过 json 标签控制
value:= struct {
Name string `json:"name"`
Key string `json:"key"`
}{}
// 将对应的配置项解析到value结构体
cfg.UnmarshalKey("app", &value)
```