github.com/zly-app/zapp@v1.3.3/readme.md (about) 1 2 # 用于快速构建项目的基础库 3 4 --- 5 <!-- TOC --> 6 7 - [开始](#%E5%BC%80%E5%A7%8B) 8 - [扩展性](#%E6%89%A9%E5%B1%95%E6%80%A7) 9 - [组件](#%E7%BB%84%E4%BB%B6) 10 - [插件](#%E6%8F%92%E4%BB%B6) 11 - [服务](#%E6%9C%8D%E5%8A%A1) 12 - [配置](#%E9%85%8D%E7%BD%AE) 13 - [使用说明](#%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E) 14 - [守护进程](#%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B) 15 - [Handler](#handler) 16 - [运行时自定义启用插件](#%E8%BF%90%E8%A1%8C%E6%97%B6%E8%87%AA%E5%AE%9A%E4%B9%89%E5%90%AF%E7%94%A8%E6%8F%92%E4%BB%B6) 17 - [运行时自定义启用服务](#%E8%BF%90%E8%A1%8C%E6%97%B6%E8%87%AA%E5%AE%9A%E4%B9%89%E5%90%AF%E7%94%A8%E6%9C%8D%E5%8A%A1) 18 - [会话独立日志](#%E4%BC%9A%E8%AF%9D%E7%8B%AC%E7%AB%8B%E6%97%A5%E5%BF%97) 19 - [app生命周期](#app%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F) 20 - [初始化](#%E5%88%9D%E5%A7%8B%E5%8C%96) 21 - [用户操作](#%E7%94%A8%E6%88%B7%E6%93%8D%E4%BD%9C) 22 - [启动](#%E5%90%AF%E5%8A%A8) 23 - [退出](#%E9%80%80%E5%87%BA) 24 25 <!-- /TOC --> 26 --- 27 28 # 开始 29 30 ```go 31 app := zapp.NewApp("test") 32 app.Run() 33 ``` 34 35 # 扩展性 36 37 ## 组件 38 39 > 我们实现了一些组件, 可以在 [这里](https://github.com/zly-app/component) 找到 40 41 ## 插件 42 43 > 我们实现了一些插件, 可以在 [这里](https://github.com/zly-app/plugin) 找到 44 45 ## 服务 46 47 > 我们实现了一些服务, 可以在 [这里](https://github.com/zly-app/service) 找到 48 49 # 配置 50 51 > 请转到 [这里](./config) 52 53 # 使用说明 54 55 ## 守护进程 56 57 > 初始化时添加 `zapp.WithEnableDaemon()` 选项, 构建后使用以下命令 58 59 ```text 60 ./app文件 61 install [args] 安装服务, args 是运行时传递给 app 的参数 62 remove 移除服务 63 start 启动app 64 stop 停止app 65 status 查看运行状态 66 ``` 67 68 ## Handler 69 70 > 初始化时添加 `zapp.WithHandler(...)` 选项 71 72 ```text 73 BeforeInitializeHandler 在app初始化前 74 AfterInitializeHandler 在app初始化后 75 BeforeStartHandler 在app启动前 76 AfterStartHandler 在app启动后 77 BeforeExitHandler 在app退出前 78 AfterExitHandler 在app退出后 79 ``` 80 81 ## 运行时自定义启用插件 82 83 > 初始化时添加 `zapp.WithCustomEnablePlugin(...)` 选项, zapp 会根据返回值来决定开启和关闭哪些插件 84 85 ```go 86 zapp.WithCustomEnablePlugin(func(app core.IApp, plugins []core.PluginType) []core.PluginType { 87 if !app.GetConfig().HasFlag("my_plugin") { 88 plugins = append(plugins, "my_plugin") 89 } 90 return plugins 91 }) 92 ``` 93 94 ## 运行时自定义启用服务 95 96 > 初始化时添加 `zapp.WithCustomEnableService(...)` 选项, zapp 会根据返回值来决定开启和关闭哪些服务 97 98 ```go 99 zapp.WithCustomEnableService(func(app core.IApp, services []core.ServiceType) []core.ServiceType) Option { 100 if !app.GetConfig().HasFlag("api_service") { 101 services = append(services, "api") 102 } 103 return services 104 }) 105 ``` 106 107 ## 独特的日志 108 109 `core.ILogger` 提供了 `NewTraceLogger(ctx context.Context, fields ...zap.Field) ILogger` 方法用于创建一个带链路id的 logger(前提是ctx中包含有效的span).<br> 110 使用生成的log打印日志会带上链路id, 并且我们会根据不同的链路id输出不同的颜色. 111 112 `core.ILogger` 提供了 `NewSessionLogger(fields ...zap.Field) ILogger` 方法用于创建一个会话 logger.<br> 113 使用会话logger打印日志会产生一个全局日志id, 并且我们会根据不同的全局日志id输出不同的颜色. 114 115 日志打印时可以将 `ctx` 传入, 如果 `ctx` 中包含 `traceID` 那么在日志输出中会带上 `traceID`. 示例 `app.Info(ctx, "test")` 116 117 # app生命周期 118 119 初始化 > 用户操作 > 启动 > 退出 120 121 ## 初始化 122 123 `app := zapp.NewApp(...)` > 生成`BaseContext` > 加载配置 > 初始化日志记录器 > 构建组件 > 构建插件 > 构建服务 124 125 ## 用户操作 126 127 用户在这里对服务进行注入, 如注入插件, 注入服务等. 128 129 ## 启动 130 131 `app.Run()` > 启动插件 > 启动服务 > 启动内存释放任务 > 阻塞等待退出信号 132 133 ## 退出 134 135 `app.Exit() 或收到退出信号` > 关闭`BaseContext` > 停止内存释放任务 > 关闭服务 > 关闭插件 > 释放组件资源 > `结束之前调用app.Run()的阻塞` 136