planetscale 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/ci.yml +24 -0
  3. data/.github/workflows/gem-push.yml +38 -0
  4. data/.github/workflows/licensed.yml +43 -0
  5. data/.gitignore +10 -0
  6. data/.licensed.yml +9 -0
  7. data/.licenses/go/github.com/armon/circbuf.dep.yml +31 -0
  8. data/.licenses/go/github.com/gorilla/mux.dep.yml +41 -0
  9. data/.licenses/go/github.com/hashicorp/go-cleanhttp.dep.yml +375 -0
  10. data/.licenses/go/github.com/mitchellh/go-homedir.dep.yml +32 -0
  11. data/.licenses/go/github.com/pkg/errors.dep.yml +36 -0
  12. data/.licenses/go/github.com/planetscale/planetscale-go/planetscale.dep.yml +160 -0
  13. data/.licenses/go/github.com/planetscale/sql-proxy/proxy.dep.yml +180 -0
  14. data/.licenses/go/go.uber.org/atomic.dep.yml +31 -0
  15. data/.licenses/go/go.uber.org/multierr.dep.yml +30 -0
  16. data/.licenses/go/go.uber.org/zap.dep.yml +30 -0
  17. data/.licenses/go/go.uber.org/zap/buffer.dep.yml +30 -0
  18. data/.licenses/go/go.uber.org/zap/internal/bufferpool.dep.yml +30 -0
  19. data/.licenses/go/go.uber.org/zap/internal/color.dep.yml +30 -0
  20. data/.licenses/go/go.uber.org/zap/internal/exit.dep.yml +31 -0
  21. data/.licenses/go/go.uber.org/zap/zapcore.dep.yml +31 -0
  22. data/.licenses/go/golang.org/x/net/context/ctxhttp.dep.yml +63 -0
  23. data/.licenses/go/golang.org/x/oauth2.dep.yml +44 -0
  24. data/.licenses/go/golang.org/x/oauth2/internal.dep.yml +38 -0
  25. data/.ruby_version +1 -0
  26. data/Gemfile +8 -0
  27. data/LICENSE +201 -0
  28. data/README.md +88 -0
  29. data/Rakefile +10 -0
  30. data/bin/console +15 -0
  31. data/bin/setup +17 -0
  32. data/controller.go +255 -0
  33. data/go.mod +16 -0
  34. data/go.sum +428 -0
  35. data/lib/generators/planetscale/install_generator.rb +58 -0
  36. data/lib/planetscale.rb +137 -0
  37. data/lib/planetscale/version.rb +5 -0
  38. data/planetscale.gemspec +44 -0
  39. data/proxy.go +128 -0
  40. data/vendor/github.com/armon/circbuf/.gitignore +22 -0
  41. data/vendor/github.com/armon/circbuf/LICENSE +20 -0
  42. data/vendor/github.com/armon/circbuf/README.md +28 -0
  43. data/vendor/github.com/armon/circbuf/circbuf.go +92 -0
  44. data/vendor/github.com/armon/circbuf/go.mod +1 -0
  45. data/vendor/github.com/golang/protobuf/AUTHORS +3 -0
  46. data/vendor/github.com/golang/protobuf/CONTRIBUTORS +3 -0
  47. data/vendor/github.com/golang/protobuf/LICENSE +28 -0
  48. data/vendor/github.com/golang/protobuf/proto/buffer.go +324 -0
  49. data/vendor/github.com/golang/protobuf/proto/defaults.go +63 -0
  50. data/vendor/github.com/golang/protobuf/proto/deprecated.go +113 -0
  51. data/vendor/github.com/golang/protobuf/proto/discard.go +58 -0
  52. data/vendor/github.com/golang/protobuf/proto/extensions.go +356 -0
  53. data/vendor/github.com/golang/protobuf/proto/properties.go +306 -0
  54. data/vendor/github.com/golang/protobuf/proto/proto.go +167 -0
  55. data/vendor/github.com/golang/protobuf/proto/registry.go +317 -0
  56. data/vendor/github.com/golang/protobuf/proto/text_decode.go +801 -0
  57. data/vendor/github.com/golang/protobuf/proto/text_encode.go +560 -0
  58. data/vendor/github.com/golang/protobuf/proto/wire.go +78 -0
  59. data/vendor/github.com/golang/protobuf/proto/wrappers.go +34 -0
  60. data/vendor/github.com/gorilla/mux/AUTHORS +8 -0
  61. data/vendor/github.com/gorilla/mux/LICENSE +27 -0
  62. data/vendor/github.com/gorilla/mux/README.md +805 -0
  63. data/vendor/github.com/gorilla/mux/doc.go +306 -0
  64. data/vendor/github.com/gorilla/mux/go.mod +3 -0
  65. data/vendor/github.com/gorilla/mux/middleware.go +74 -0
  66. data/vendor/github.com/gorilla/mux/mux.go +606 -0
  67. data/vendor/github.com/gorilla/mux/regexp.go +388 -0
  68. data/vendor/github.com/gorilla/mux/route.go +736 -0
  69. data/vendor/github.com/gorilla/mux/test_helpers.go +19 -0
  70. data/vendor/github.com/hashicorp/go-cleanhttp/LICENSE +363 -0
  71. data/vendor/github.com/hashicorp/go-cleanhttp/README.md +30 -0
  72. data/vendor/github.com/hashicorp/go-cleanhttp/cleanhttp.go +58 -0
  73. data/vendor/github.com/hashicorp/go-cleanhttp/doc.go +20 -0
  74. data/vendor/github.com/hashicorp/go-cleanhttp/go.mod +3 -0
  75. data/vendor/github.com/hashicorp/go-cleanhttp/handlers.go +48 -0
  76. data/vendor/github.com/mitchellh/go-homedir/LICENSE +21 -0
  77. data/vendor/github.com/mitchellh/go-homedir/README.md +14 -0
  78. data/vendor/github.com/mitchellh/go-homedir/go.mod +1 -0
  79. data/vendor/github.com/mitchellh/go-homedir/homedir.go +167 -0
  80. data/vendor/github.com/pkg/errors/.gitignore +24 -0
  81. data/vendor/github.com/pkg/errors/.travis.yml +10 -0
  82. data/vendor/github.com/pkg/errors/LICENSE +23 -0
  83. data/vendor/github.com/pkg/errors/Makefile +44 -0
  84. data/vendor/github.com/pkg/errors/README.md +59 -0
  85. data/vendor/github.com/pkg/errors/appveyor.yml +32 -0
  86. data/vendor/github.com/pkg/errors/errors.go +288 -0
  87. data/vendor/github.com/pkg/errors/go113.go +38 -0
  88. data/vendor/github.com/pkg/errors/stack.go +177 -0
  89. data/vendor/github.com/planetscale/planetscale-go/planetscale/backups.go +139 -0
  90. data/vendor/github.com/planetscale/planetscale-go/planetscale/branches.go +258 -0
  91. data/vendor/github.com/planetscale/planetscale-go/planetscale/certs.go +142 -0
  92. data/vendor/github.com/planetscale/planetscale-go/planetscale/client.go +305 -0
  93. data/vendor/github.com/planetscale/planetscale-go/planetscale/databases.go +131 -0
  94. data/vendor/github.com/planetscale/planetscale-go/planetscale/deploy_requests.go +368 -0
  95. data/vendor/github.com/planetscale/planetscale-go/planetscale/organizations.go +78 -0
  96. data/vendor/github.com/planetscale/planetscale-go/planetscale/service_tokens.go +163 -0
  97. data/vendor/github.com/planetscale/sql-proxy/proxy/client.go +467 -0
  98. data/vendor/github.com/planetscale/sql-proxy/proxy/tls_cache.go +73 -0
  99. data/vendor/go.uber.org/atomic/.codecov.yml +19 -0
  100. data/vendor/go.uber.org/atomic/.gitignore +12 -0
  101. data/vendor/go.uber.org/atomic/.travis.yml +27 -0
  102. data/vendor/go.uber.org/atomic/CHANGELOG.md +76 -0
  103. data/vendor/go.uber.org/atomic/LICENSE.txt +19 -0
  104. data/vendor/go.uber.org/atomic/Makefile +78 -0
  105. data/vendor/go.uber.org/atomic/README.md +63 -0
  106. data/vendor/go.uber.org/atomic/bool.go +81 -0
  107. data/vendor/go.uber.org/atomic/bool_ext.go +53 -0
  108. data/vendor/go.uber.org/atomic/doc.go +23 -0
  109. data/vendor/go.uber.org/atomic/duration.go +82 -0
  110. data/vendor/go.uber.org/atomic/duration_ext.go +40 -0
  111. data/vendor/go.uber.org/atomic/error.go +51 -0
  112. data/vendor/go.uber.org/atomic/error_ext.go +39 -0
  113. data/vendor/go.uber.org/atomic/float64.go +76 -0
  114. data/vendor/go.uber.org/atomic/float64_ext.go +47 -0
  115. data/vendor/go.uber.org/atomic/gen.go +26 -0
  116. data/vendor/go.uber.org/atomic/go.mod +8 -0
  117. data/vendor/go.uber.org/atomic/go.sum +9 -0
  118. data/vendor/go.uber.org/atomic/int32.go +102 -0
  119. data/vendor/go.uber.org/atomic/int64.go +102 -0
  120. data/vendor/go.uber.org/atomic/nocmp.go +35 -0
  121. data/vendor/go.uber.org/atomic/string.go +54 -0
  122. data/vendor/go.uber.org/atomic/string_ext.go +43 -0
  123. data/vendor/go.uber.org/atomic/uint32.go +102 -0
  124. data/vendor/go.uber.org/atomic/uint64.go +102 -0
  125. data/vendor/go.uber.org/atomic/value.go +31 -0
  126. data/vendor/go.uber.org/multierr/.codecov.yml +15 -0
  127. data/vendor/go.uber.org/multierr/.gitignore +4 -0
  128. data/vendor/go.uber.org/multierr/.travis.yml +23 -0
  129. data/vendor/go.uber.org/multierr/CHANGELOG.md +60 -0
  130. data/vendor/go.uber.org/multierr/LICENSE.txt +19 -0
  131. data/vendor/go.uber.org/multierr/Makefile +42 -0
  132. data/vendor/go.uber.org/multierr/README.md +23 -0
  133. data/vendor/go.uber.org/multierr/error.go +449 -0
  134. data/vendor/go.uber.org/multierr/glide.yaml +8 -0
  135. data/vendor/go.uber.org/multierr/go.mod +8 -0
  136. data/vendor/go.uber.org/multierr/go.sum +11 -0
  137. data/vendor/go.uber.org/multierr/go113.go +52 -0
  138. data/vendor/go.uber.org/zap/.codecov.yml +17 -0
  139. data/vendor/go.uber.org/zap/.gitignore +32 -0
  140. data/vendor/go.uber.org/zap/.readme.tmpl +109 -0
  141. data/vendor/go.uber.org/zap/.travis.yml +23 -0
  142. data/vendor/go.uber.org/zap/CHANGELOG.md +432 -0
  143. data/vendor/go.uber.org/zap/CODE_OF_CONDUCT.md +75 -0
  144. data/vendor/go.uber.org/zap/CONTRIBUTING.md +81 -0
  145. data/vendor/go.uber.org/zap/FAQ.md +156 -0
  146. data/vendor/go.uber.org/zap/LICENSE.txt +19 -0
  147. data/vendor/go.uber.org/zap/Makefile +63 -0
  148. data/vendor/go.uber.org/zap/README.md +134 -0
  149. data/vendor/go.uber.org/zap/array.go +320 -0
  150. data/vendor/go.uber.org/zap/buffer/buffer.go +123 -0
  151. data/vendor/go.uber.org/zap/buffer/pool.go +49 -0
  152. data/vendor/go.uber.org/zap/checklicense.sh +17 -0
  153. data/vendor/go.uber.org/zap/config.go +264 -0
  154. data/vendor/go.uber.org/zap/doc.go +113 -0
  155. data/vendor/go.uber.org/zap/encoder.go +79 -0
  156. data/vendor/go.uber.org/zap/error.go +80 -0
  157. data/vendor/go.uber.org/zap/field.go +539 -0
  158. data/vendor/go.uber.org/zap/flag.go +39 -0
  159. data/vendor/go.uber.org/zap/glide.yaml +34 -0
  160. data/vendor/go.uber.org/zap/global.go +168 -0
  161. data/vendor/go.uber.org/zap/global_go112.go +26 -0
  162. data/vendor/go.uber.org/zap/global_prego112.go +26 -0
  163. data/vendor/go.uber.org/zap/go.mod +13 -0
  164. data/vendor/go.uber.org/zap/go.sum +56 -0
  165. data/vendor/go.uber.org/zap/http_handler.go +81 -0
  166. data/vendor/go.uber.org/zap/internal/bufferpool/bufferpool.go +31 -0
  167. data/vendor/go.uber.org/zap/internal/color/color.go +44 -0
  168. data/vendor/go.uber.org/zap/internal/exit/exit.go +64 -0
  169. data/vendor/go.uber.org/zap/level.go +132 -0
  170. data/vendor/go.uber.org/zap/logger.go +344 -0
  171. data/vendor/go.uber.org/zap/options.go +140 -0
  172. data/vendor/go.uber.org/zap/sink.go +161 -0
  173. data/vendor/go.uber.org/zap/stacktrace.go +85 -0
  174. data/vendor/go.uber.org/zap/sugar.go +304 -0
  175. data/vendor/go.uber.org/zap/time.go +27 -0
  176. data/vendor/go.uber.org/zap/writer.go +99 -0
  177. data/vendor/go.uber.org/zap/zapcore/console_encoder.go +161 -0
  178. data/vendor/go.uber.org/zap/zapcore/core.go +113 -0
  179. data/vendor/go.uber.org/zap/zapcore/doc.go +24 -0
  180. data/vendor/go.uber.org/zap/zapcore/encoder.go +443 -0
  181. data/vendor/go.uber.org/zap/zapcore/entry.go +264 -0
  182. data/vendor/go.uber.org/zap/zapcore/error.go +115 -0
  183. data/vendor/go.uber.org/zap/zapcore/field.go +227 -0
  184. data/vendor/go.uber.org/zap/zapcore/hook.go +68 -0
  185. data/vendor/go.uber.org/zap/zapcore/increase_level.go +66 -0
  186. data/vendor/go.uber.org/zap/zapcore/json_encoder.go +534 -0
  187. data/vendor/go.uber.org/zap/zapcore/level.go +175 -0
  188. data/vendor/go.uber.org/zap/zapcore/level_strings.go +46 -0
  189. data/vendor/go.uber.org/zap/zapcore/marshaler.go +61 -0
  190. data/vendor/go.uber.org/zap/zapcore/memory_encoder.go +179 -0
  191. data/vendor/go.uber.org/zap/zapcore/sampler.go +208 -0
  192. data/vendor/go.uber.org/zap/zapcore/tee.go +81 -0
  193. data/vendor/go.uber.org/zap/zapcore/write_syncer.go +123 -0
  194. data/vendor/golang.org/x/net/AUTHORS +3 -0
  195. data/vendor/golang.org/x/net/CONTRIBUTORS +3 -0
  196. data/vendor/golang.org/x/net/LICENSE +27 -0
  197. data/vendor/golang.org/x/net/PATENTS +22 -0
  198. data/vendor/golang.org/x/net/context/context.go +56 -0
  199. data/vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go +71 -0
  200. data/vendor/golang.org/x/net/context/go17.go +73 -0
  201. data/vendor/golang.org/x/net/context/go19.go +21 -0
  202. data/vendor/golang.org/x/net/context/pre_go17.go +301 -0
  203. data/vendor/golang.org/x/net/context/pre_go19.go +110 -0
  204. data/vendor/golang.org/x/oauth2/.travis.yml +13 -0
  205. data/vendor/golang.org/x/oauth2/AUTHORS +3 -0
  206. data/vendor/golang.org/x/oauth2/CONTRIBUTING.md +26 -0
  207. data/vendor/golang.org/x/oauth2/CONTRIBUTORS +3 -0
  208. data/vendor/golang.org/x/oauth2/LICENSE +27 -0
  209. data/vendor/golang.org/x/oauth2/README.md +36 -0
  210. data/vendor/golang.org/x/oauth2/go.mod +9 -0
  211. data/vendor/golang.org/x/oauth2/go.sum +361 -0
  212. data/vendor/golang.org/x/oauth2/internal/client_appengine.go +14 -0
  213. data/vendor/golang.org/x/oauth2/internal/doc.go +6 -0
  214. data/vendor/golang.org/x/oauth2/internal/oauth2.go +37 -0
  215. data/vendor/golang.org/x/oauth2/internal/token.go +294 -0
  216. data/vendor/golang.org/x/oauth2/internal/transport.go +33 -0
  217. data/vendor/golang.org/x/oauth2/oauth2.go +381 -0
  218. data/vendor/golang.org/x/oauth2/token.go +178 -0
  219. data/vendor/golang.org/x/oauth2/transport.go +89 -0
  220. data/vendor/google.golang.org/appengine/LICENSE +202 -0
  221. data/vendor/google.golang.org/appengine/internal/api.go +678 -0
  222. data/vendor/google.golang.org/appengine/internal/api_classic.go +169 -0
  223. data/vendor/google.golang.org/appengine/internal/api_common.go +123 -0
  224. data/vendor/google.golang.org/appengine/internal/app_id.go +28 -0
  225. data/vendor/google.golang.org/appengine/internal/base/api_base.pb.go +308 -0
  226. data/vendor/google.golang.org/appengine/internal/base/api_base.proto +33 -0
  227. data/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.pb.go +4367 -0
  228. data/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.proto +551 -0
  229. data/vendor/google.golang.org/appengine/internal/identity.go +55 -0
  230. data/vendor/google.golang.org/appengine/internal/identity_classic.go +61 -0
  231. data/vendor/google.golang.org/appengine/internal/identity_flex.go +11 -0
  232. data/vendor/google.golang.org/appengine/internal/identity_vm.go +134 -0
  233. data/vendor/google.golang.org/appengine/internal/internal.go +110 -0
  234. data/vendor/google.golang.org/appengine/internal/log/log_service.pb.go +1313 -0
  235. data/vendor/google.golang.org/appengine/internal/log/log_service.proto +150 -0
  236. data/vendor/google.golang.org/appengine/internal/main.go +16 -0
  237. data/vendor/google.golang.org/appengine/internal/main_common.go +7 -0
  238. data/vendor/google.golang.org/appengine/internal/main_vm.go +69 -0
  239. data/vendor/google.golang.org/appengine/internal/metadata.go +60 -0
  240. data/vendor/google.golang.org/appengine/internal/net.go +56 -0
  241. data/vendor/google.golang.org/appengine/internal/regen.sh +40 -0
  242. data/vendor/google.golang.org/appengine/internal/remote_api/remote_api.pb.go +361 -0
  243. data/vendor/google.golang.org/appengine/internal/remote_api/remote_api.proto +44 -0
  244. data/vendor/google.golang.org/appengine/internal/transaction.go +115 -0
  245. data/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.pb.go +527 -0
  246. data/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto +64 -0
  247. data/vendor/google.golang.org/appengine/urlfetch/urlfetch.go +210 -0
  248. data/vendor/google.golang.org/protobuf/AUTHORS +3 -0
  249. data/vendor/google.golang.org/protobuf/CONTRIBUTORS +3 -0
  250. data/vendor/google.golang.org/protobuf/LICENSE +27 -0
  251. data/vendor/google.golang.org/protobuf/PATENTS +22 -0
  252. data/vendor/google.golang.org/protobuf/encoding/prototext/decode.go +773 -0
  253. data/vendor/google.golang.org/protobuf/encoding/prototext/doc.go +7 -0
  254. data/vendor/google.golang.org/protobuf/encoding/prototext/encode.go +371 -0
  255. data/vendor/google.golang.org/protobuf/encoding/protowire/wire.go +538 -0
  256. data/vendor/google.golang.org/protobuf/internal/descfmt/stringer.go +318 -0
  257. data/vendor/google.golang.org/protobuf/internal/descopts/options.go +29 -0
  258. data/vendor/google.golang.org/protobuf/internal/detrand/rand.go +69 -0
  259. data/vendor/google.golang.org/protobuf/internal/encoding/defval/default.go +213 -0
  260. data/vendor/google.golang.org/protobuf/internal/encoding/messageset/messageset.go +241 -0
  261. data/vendor/google.golang.org/protobuf/internal/encoding/tag/tag.go +207 -0
  262. data/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go +665 -0
  263. data/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go +190 -0
  264. data/vendor/google.golang.org/protobuf/internal/encoding/text/decode_string.go +161 -0
  265. data/vendor/google.golang.org/protobuf/internal/encoding/text/decode_token.go +373 -0
  266. data/vendor/google.golang.org/protobuf/internal/encoding/text/doc.go +29 -0
  267. data/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go +265 -0
  268. data/vendor/google.golang.org/protobuf/internal/errors/errors.go +89 -0
  269. data/vendor/google.golang.org/protobuf/internal/errors/is_go112.go +39 -0
  270. data/vendor/google.golang.org/protobuf/internal/errors/is_go113.go +12 -0
  271. data/vendor/google.golang.org/protobuf/internal/filedesc/build.go +158 -0
  272. data/vendor/google.golang.org/protobuf/internal/filedesc/desc.go +631 -0
  273. data/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go +471 -0
  274. data/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go +704 -0
  275. data/vendor/google.golang.org/protobuf/internal/filedesc/desc_list.go +450 -0
  276. data/vendor/google.golang.org/protobuf/internal/filedesc/desc_list_gen.go +356 -0
  277. data/vendor/google.golang.org/protobuf/internal/filedesc/placeholder.go +107 -0
  278. data/vendor/google.golang.org/protobuf/internal/filetype/build.go +297 -0
  279. data/vendor/google.golang.org/protobuf/internal/flags/flags.go +24 -0
  280. data/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_disable.go +9 -0
  281. data/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_enable.go +9 -0
  282. data/vendor/google.golang.org/protobuf/internal/genid/any_gen.go +34 -0
  283. data/vendor/google.golang.org/protobuf/internal/genid/api_gen.go +106 -0
  284. data/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go +829 -0
  285. data/vendor/google.golang.org/protobuf/internal/genid/doc.go +11 -0
  286. data/vendor/google.golang.org/protobuf/internal/genid/duration_gen.go +34 -0
  287. data/vendor/google.golang.org/protobuf/internal/genid/empty_gen.go +19 -0
  288. data/vendor/google.golang.org/protobuf/internal/genid/field_mask_gen.go +31 -0
  289. data/vendor/google.golang.org/protobuf/internal/genid/goname.go +25 -0
  290. data/vendor/google.golang.org/protobuf/internal/genid/map_entry.go +16 -0
  291. data/vendor/google.golang.org/protobuf/internal/genid/source_context_gen.go +31 -0
  292. data/vendor/google.golang.org/protobuf/internal/genid/struct_gen.go +116 -0
  293. data/vendor/google.golang.org/protobuf/internal/genid/timestamp_gen.go +34 -0
  294. data/vendor/google.golang.org/protobuf/internal/genid/type_gen.go +184 -0
  295. data/vendor/google.golang.org/protobuf/internal/genid/wrappers.go +13 -0
  296. data/vendor/google.golang.org/protobuf/internal/genid/wrappers_gen.go +175 -0
  297. data/vendor/google.golang.org/protobuf/internal/impl/api_export.go +177 -0
  298. data/vendor/google.golang.org/protobuf/internal/impl/checkinit.go +141 -0
  299. data/vendor/google.golang.org/protobuf/internal/impl/codec_extension.go +223 -0
  300. data/vendor/google.golang.org/protobuf/internal/impl/codec_field.go +830 -0
  301. data/vendor/google.golang.org/protobuf/internal/impl/codec_gen.go +5637 -0
  302. data/vendor/google.golang.org/protobuf/internal/impl/codec_map.go +388 -0
  303. data/vendor/google.golang.org/protobuf/internal/impl/codec_map_go111.go +37 -0
  304. data/vendor/google.golang.org/protobuf/internal/impl/codec_map_go112.go +11 -0
  305. data/vendor/google.golang.org/protobuf/internal/impl/codec_message.go +217 -0
  306. data/vendor/google.golang.org/protobuf/internal/impl/codec_messageset.go +123 -0
  307. data/vendor/google.golang.org/protobuf/internal/impl/codec_reflect.go +209 -0
  308. data/vendor/google.golang.org/protobuf/internal/impl/codec_tables.go +557 -0
  309. data/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go +17 -0
  310. data/vendor/google.golang.org/protobuf/internal/impl/convert.go +496 -0
  311. data/vendor/google.golang.org/protobuf/internal/impl/convert_list.go +141 -0
  312. data/vendor/google.golang.org/protobuf/internal/impl/convert_map.go +121 -0
  313. data/vendor/google.golang.org/protobuf/internal/impl/decode.go +276 -0
  314. data/vendor/google.golang.org/protobuf/internal/impl/encode.go +201 -0
  315. data/vendor/google.golang.org/protobuf/internal/impl/enum.go +21 -0
  316. data/vendor/google.golang.org/protobuf/internal/impl/extension.go +156 -0
  317. data/vendor/google.golang.org/protobuf/internal/impl/legacy_enum.go +219 -0
  318. data/vendor/google.golang.org/protobuf/internal/impl/legacy_export.go +92 -0
  319. data/vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go +176 -0
  320. data/vendor/google.golang.org/protobuf/internal/impl/legacy_file.go +81 -0
  321. data/vendor/google.golang.org/protobuf/internal/impl/legacy_message.go +558 -0
  322. data/vendor/google.golang.org/protobuf/internal/impl/merge.go +176 -0
  323. data/vendor/google.golang.org/protobuf/internal/impl/merge_gen.go +209 -0
  324. data/vendor/google.golang.org/protobuf/internal/impl/message.go +276 -0
  325. data/vendor/google.golang.org/protobuf/internal/impl/message_reflect.go +465 -0
  326. data/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go +543 -0
  327. data/vendor/google.golang.org/protobuf/internal/impl/message_reflect_gen.go +249 -0
  328. data/vendor/google.golang.org/protobuf/internal/impl/pointer_reflect.go +178 -0
  329. data/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go +174 -0
  330. data/vendor/google.golang.org/protobuf/internal/impl/validate.go +576 -0
  331. data/vendor/google.golang.org/protobuf/internal/impl/weak.go +74 -0
  332. data/vendor/google.golang.org/protobuf/internal/order/order.go +89 -0
  333. data/vendor/google.golang.org/protobuf/internal/order/range.go +115 -0
  334. data/vendor/google.golang.org/protobuf/internal/pragma/pragma.go +29 -0
  335. data/vendor/google.golang.org/protobuf/internal/set/ints.go +58 -0
  336. data/vendor/google.golang.org/protobuf/internal/strs/strings.go +196 -0
  337. data/vendor/google.golang.org/protobuf/internal/strs/strings_pure.go +27 -0
  338. data/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go +94 -0
  339. data/vendor/google.golang.org/protobuf/internal/version/version.go +79 -0
  340. data/vendor/google.golang.org/protobuf/proto/checkinit.go +71 -0
  341. data/vendor/google.golang.org/protobuf/proto/decode.go +278 -0
  342. data/vendor/google.golang.org/protobuf/proto/decode_gen.go +603 -0
  343. data/vendor/google.golang.org/protobuf/proto/doc.go +94 -0
  344. data/vendor/google.golang.org/protobuf/proto/encode.go +319 -0
  345. data/vendor/google.golang.org/protobuf/proto/encode_gen.go +97 -0
  346. data/vendor/google.golang.org/protobuf/proto/equal.go +167 -0
  347. data/vendor/google.golang.org/protobuf/proto/extension.go +92 -0
  348. data/vendor/google.golang.org/protobuf/proto/merge.go +139 -0
  349. data/vendor/google.golang.org/protobuf/proto/messageset.go +93 -0
  350. data/vendor/google.golang.org/protobuf/proto/proto.go +43 -0
  351. data/vendor/google.golang.org/protobuf/proto/proto_methods.go +19 -0
  352. data/vendor/google.golang.org/protobuf/proto/proto_reflect.go +19 -0
  353. data/vendor/google.golang.org/protobuf/proto/reset.go +43 -0
  354. data/vendor/google.golang.org/protobuf/proto/size.go +97 -0
  355. data/vendor/google.golang.org/protobuf/proto/size_gen.go +55 -0
  356. data/vendor/google.golang.org/protobuf/proto/wrappers.go +29 -0
  357. data/vendor/google.golang.org/protobuf/reflect/protodesc/desc.go +276 -0
  358. data/vendor/google.golang.org/protobuf/reflect/protodesc/desc_init.go +248 -0
  359. data/vendor/google.golang.org/protobuf/reflect/protodesc/desc_resolve.go +286 -0
  360. data/vendor/google.golang.org/protobuf/reflect/protodesc/desc_validate.go +374 -0
  361. data/vendor/google.golang.org/protobuf/reflect/protodesc/proto.go +252 -0
  362. data/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go +77 -0
  363. data/vendor/google.golang.org/protobuf/reflect/protoreflect/proto.go +504 -0
  364. data/vendor/google.golang.org/protobuf/reflect/protoreflect/source.go +128 -0
  365. data/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go +461 -0
  366. data/vendor/google.golang.org/protobuf/reflect/protoreflect/type.go +665 -0
  367. data/vendor/google.golang.org/protobuf/reflect/protoreflect/value.go +285 -0
  368. data/vendor/google.golang.org/protobuf/reflect/protoreflect/value_pure.go +59 -0
  369. data/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go +411 -0
  370. data/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe.go +98 -0
  371. data/vendor/google.golang.org/protobuf/reflect/protoregistry/registry.go +869 -0
  372. data/vendor/google.golang.org/protobuf/runtime/protoiface/legacy.go +15 -0
  373. data/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go +167 -0
  374. data/vendor/google.golang.org/protobuf/runtime/protoimpl/impl.go +44 -0
  375. data/vendor/google.golang.org/protobuf/runtime/protoimpl/version.go +56 -0
  376. data/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go +4039 -0
  377. data/vendor/modules.txt +79 -0
  378. metadata +495 -0
@@ -0,0 +1,75 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ In the interest of fostering an open and welcoming environment, we as
6
+ contributors and maintainers pledge to making participation in our project and
7
+ our community a harassment-free experience for everyone, regardless of age,
8
+ body size, disability, ethnicity, gender identity and expression, level of
9
+ experience, nationality, personal appearance, race, religion, or sexual
10
+ identity and orientation.
11
+
12
+ ## Our Standards
13
+
14
+ Examples of behavior that contributes to creating a positive environment
15
+ include:
16
+
17
+ * Using welcoming and inclusive language
18
+ * Being respectful of differing viewpoints and experiences
19
+ * Gracefully accepting constructive criticism
20
+ * Focusing on what is best for the community
21
+ * Showing empathy towards other community members
22
+
23
+ Examples of unacceptable behavior by participants include:
24
+
25
+ * The use of sexualized language or imagery and unwelcome sexual attention or
26
+ advances
27
+ * Trolling, insulting/derogatory comments, and personal or political attacks
28
+ * Public or private harassment
29
+ * Publishing others' private information, such as a physical or electronic
30
+ address, without explicit permission
31
+ * Other conduct which could reasonably be considered inappropriate in a
32
+ professional setting
33
+
34
+ ## Our Responsibilities
35
+
36
+ Project maintainers are responsible for clarifying the standards of acceptable
37
+ behavior and are expected to take appropriate and fair corrective action in
38
+ response to any instances of unacceptable behavior.
39
+
40
+ Project maintainers have the right and responsibility to remove, edit, or
41
+ reject comments, commits, code, wiki edits, issues, and other contributions
42
+ that are not aligned to this Code of Conduct, or to ban temporarily or
43
+ permanently any contributor for other behaviors that they deem inappropriate,
44
+ threatening, offensive, or harmful.
45
+
46
+ ## Scope
47
+
48
+ This Code of Conduct applies both within project spaces and in public spaces
49
+ when an individual is representing the project or its community. Examples of
50
+ representing a project or community include using an official project e-mail
51
+ address, posting via an official social media account, or acting as an
52
+ appointed representative at an online or offline event. Representation of a
53
+ project may be further defined and clarified by project maintainers.
54
+
55
+ ## Enforcement
56
+
57
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
+ reported by contacting the project team at oss-conduct@uber.com. The project
59
+ team will review and investigate all complaints, and will respond in a way
60
+ that it deems appropriate to the circumstances. The project team is obligated
61
+ to maintain confidentiality with regard to the reporter of an incident.
62
+ Further details of specific enforcement policies may be posted separately.
63
+
64
+ Project maintainers who do not follow or enforce the Code of Conduct in good
65
+ faith may face temporary or permanent repercussions as determined by other
66
+ members of the project's leadership.
67
+
68
+ ## Attribution
69
+
70
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage],
71
+ version 1.4, available at
72
+ [http://contributor-covenant.org/version/1/4][version].
73
+
74
+ [homepage]: http://contributor-covenant.org
75
+ [version]: http://contributor-covenant.org/version/1/4/
@@ -0,0 +1,81 @@
1
+ # Contributing
2
+
3
+ We'd love your help making zap the very best structured logging library in Go!
4
+
5
+ If you'd like to add new exported APIs, please [open an issue][open-issue]
6
+ describing your proposal — discussing API changes ahead of time makes
7
+ pull request review much smoother. In your issue, pull request, and any other
8
+ communications, please remember to treat your fellow contributors with
9
+ respect! We take our [code of conduct](CODE_OF_CONDUCT.md) seriously.
10
+
11
+ Note that you'll need to sign [Uber's Contributor License Agreement][cla]
12
+ before we can accept any of your contributions. If necessary, a bot will remind
13
+ you to accept the CLA when you open your pull request.
14
+
15
+ ## Setup
16
+
17
+ [Fork][fork], then clone the repository:
18
+
19
+ ```
20
+ mkdir -p $GOPATH/src/go.uber.org
21
+ cd $GOPATH/src/go.uber.org
22
+ git clone git@github.com:your_github_username/zap.git
23
+ cd zap
24
+ git remote add upstream https://github.com/uber-go/zap.git
25
+ git fetch upstream
26
+ ```
27
+
28
+ Install zap's dependencies:
29
+
30
+ ```
31
+ make dependencies
32
+ ```
33
+
34
+ Make sure that the tests and the linters pass:
35
+
36
+ ```
37
+ make test
38
+ make lint
39
+ ```
40
+
41
+ If you're not using the minor version of Go specified in the Makefile's
42
+ `LINTABLE_MINOR_VERSIONS` variable, `make lint` doesn't do anything. This is
43
+ fine, but it means that you'll only discover lint failures after you open your
44
+ pull request.
45
+
46
+ ## Making Changes
47
+
48
+ Start by creating a new branch for your changes:
49
+
50
+ ```
51
+ cd $GOPATH/src/go.uber.org/zap
52
+ git checkout master
53
+ git fetch upstream
54
+ git rebase upstream/master
55
+ git checkout -b cool_new_feature
56
+ ```
57
+
58
+ Make your changes, then ensure that `make lint` and `make test` still pass. If
59
+ you're satisfied with your changes, push them to your fork.
60
+
61
+ ```
62
+ git push origin cool_new_feature
63
+ ```
64
+
65
+ Then use the GitHub UI to open a pull request.
66
+
67
+ At this point, you're waiting on us to review your changes. We *try* to respond
68
+ to issues and pull requests within a few business days, and we may suggest some
69
+ improvements or alternatives. Once your changes are approved, one of the
70
+ project maintainers will merge them.
71
+
72
+ We're much more likely to approve your changes if you:
73
+
74
+ * Add tests for new functionality.
75
+ * Write a [good commit message][commit-message].
76
+ * Maintain backward compatibility.
77
+
78
+ [fork]: https://github.com/uber-go/zap/fork
79
+ [open-issue]: https://github.com/uber-go/zap/issues/new
80
+ [cla]: https://cla-assistant.io/uber-go/zap
81
+ [commit-message]: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html
@@ -0,0 +1,156 @@
1
+ # Frequently Asked Questions
2
+
3
+ ## Design
4
+
5
+ ### Why spend so much effort on logger performance?
6
+
7
+ Of course, most applications won't notice the impact of a slow logger: they
8
+ already take tens or hundreds of milliseconds for each operation, so an extra
9
+ millisecond doesn't matter.
10
+
11
+ On the other hand, why *not* make structured logging fast? The `SugaredLogger`
12
+ isn't any harder to use than other logging packages, and the `Logger` makes
13
+ structured logging possible in performance-sensitive contexts. Across a fleet
14
+ of Go microservices, making each application even slightly more efficient adds
15
+ up quickly.
16
+
17
+ ### Why aren't `Logger` and `SugaredLogger` interfaces?
18
+
19
+ Unlike the familiar `io.Writer` and `http.Handler`, `Logger` and
20
+ `SugaredLogger` interfaces would include *many* methods. As [Rob Pike points
21
+ out][go-proverbs], "The bigger the interface, the weaker the abstraction."
22
+ Interfaces are also rigid — *any* change requires releasing a new major
23
+ version, since it breaks all third-party implementations.
24
+
25
+ Making the `Logger` and `SugaredLogger` concrete types doesn't sacrifice much
26
+ abstraction, and it lets us add methods without introducing breaking changes.
27
+ Your applications should define and depend upon an interface that includes
28
+ just the methods you use.
29
+
30
+ ### Why sample application logs?
31
+
32
+ Applications often experience runs of errors, either because of a bug or
33
+ because of a misbehaving user. Logging errors is usually a good idea, but it
34
+ can easily make this bad situation worse: not only is your application coping
35
+ with a flood of errors, it's also spending extra CPU cycles and I/O logging
36
+ those errors. Since writes are typically serialized, logging limits throughput
37
+ when you need it most.
38
+
39
+ Sampling fixes this problem by dropping repetitive log entries. Under normal
40
+ conditions, your application writes out every entry. When similar entries are
41
+ logged hundreds or thousands of times each second, though, zap begins dropping
42
+ duplicates to preserve throughput.
43
+
44
+ ### Why do the structured logging APIs take a message in addition to fields?
45
+
46
+ Subjectively, we find it helpful to accompany structured context with a brief
47
+ description. This isn't critical during development, but it makes debugging
48
+ and operating unfamiliar systems much easier.
49
+
50
+ More concretely, zap's sampling algorithm uses the message to identify
51
+ duplicate entries. In our experience, this is a practical middle ground
52
+ between random sampling (which often drops the exact entry that you need while
53
+ debugging) and hashing the complete entry (which is prohibitively expensive).
54
+
55
+ ### Why include package-global loggers?
56
+
57
+ Since so many other logging packages include a global logger, many
58
+ applications aren't designed to accept loggers as explicit parameters.
59
+ Changing function signatures is often a breaking change, so zap includes
60
+ global loggers to simplify migration.
61
+
62
+ Avoid them where possible.
63
+
64
+ ### Why include dedicated Panic and Fatal log levels?
65
+
66
+ In general, application code should handle errors gracefully instead of using
67
+ `panic` or `os.Exit`. However, every rule has exceptions, and it's common to
68
+ crash when an error is truly unrecoverable. To avoid losing any information
69
+ — especially the reason for the crash — the logger must flush any
70
+ buffered entries before the process exits.
71
+
72
+ Zap makes this easy by offering `Panic` and `Fatal` logging methods that
73
+ automatically flush before exiting. Of course, this doesn't guarantee that
74
+ logs will never be lost, but it eliminates a common error.
75
+
76
+ See the discussion in uber-go/zap#207 for more details.
77
+
78
+ ### What's `DPanic`?
79
+
80
+ `DPanic` stands for "panic in development." In development, it logs at
81
+ `PanicLevel`; otherwise, it logs at `ErrorLevel`. `DPanic` makes it easier to
82
+ catch errors that are theoretically possible, but shouldn't actually happen,
83
+ *without* crashing in production.
84
+
85
+ If you've ever written code like this, you need `DPanic`:
86
+
87
+ ```go
88
+ if err != nil {
89
+ panic(fmt.Sprintf("shouldn't ever get here: %v", err))
90
+ }
91
+ ```
92
+
93
+ ## Installation
94
+
95
+ ### What does the error `expects import "go.uber.org/zap"` mean?
96
+
97
+ Either zap was installed incorrectly or you're referencing the wrong package
98
+ name in your code.
99
+
100
+ Zap's source code happens to be hosted on GitHub, but the [import
101
+ path][import-path] is `go.uber.org/zap`. This gives us, the project
102
+ maintainers, the freedom to move the source code if necessary. However, it
103
+ means that you need to take a little care when installing and using the
104
+ package.
105
+
106
+ If you follow two simple rules, everything should work: install zap with `go
107
+ get -u go.uber.org/zap`, and always import it in your code with `import
108
+ "go.uber.org/zap"`. Your code shouldn't contain *any* references to
109
+ `github.com/uber-go/zap`.
110
+
111
+ ## Usage
112
+
113
+ ### Does zap support log rotation?
114
+
115
+ Zap doesn't natively support rotating log files, since we prefer to leave this
116
+ to an external program like `logrotate`.
117
+
118
+ However, it's easy to integrate a log rotation package like
119
+ [`gopkg.in/natefinch/lumberjack.v2`][lumberjack] as a `zapcore.WriteSyncer`.
120
+
121
+ ```go
122
+ // lumberjack.Logger is already safe for concurrent use, so we don't need to
123
+ // lock it.
124
+ w := zapcore.AddSync(&lumberjack.Logger{
125
+ Filename: "/var/log/myapp/foo.log",
126
+ MaxSize: 500, // megabytes
127
+ MaxBackups: 3,
128
+ MaxAge: 28, // days
129
+ })
130
+ core := zapcore.NewCore(
131
+ zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
132
+ w,
133
+ zap.InfoLevel,
134
+ )
135
+ logger := zap.New(core)
136
+ ```
137
+
138
+ ## Extensions
139
+
140
+ We'd love to support every logging need within zap itself, but we're only
141
+ familiar with a handful of log ingestion systems, flag-parsing packages, and
142
+ the like. Rather than merging code that we can't effectively debug and
143
+ support, we'd rather grow an ecosystem of zap extensions.
144
+
145
+ We're aware of the following extensions, but haven't used them ourselves:
146
+
147
+ | Package | Integration |
148
+ | --- | --- |
149
+ | `github.com/tchap/zapext` | Sentry, syslog |
150
+ | `github.com/fgrosse/zaptest` | Ginkgo |
151
+ | `github.com/blendle/zapdriver` | Stackdriver |
152
+ | `github.com/moul/zapgorm` | Gorm |
153
+
154
+ [go-proverbs]: https://go-proverbs.github.io/
155
+ [import-path]: https://golang.org/cmd/go/#hdr-Remote_import_paths
156
+ [lumberjack]: https://godoc.org/gopkg.in/natefinch/lumberjack.v2
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2016-2017 Uber Technologies, Inc.
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
@@ -0,0 +1,63 @@
1
+ export GOBIN ?= $(shell pwd)/bin
2
+
3
+ GOLINT = $(GOBIN)/golint
4
+ STATICCHECK = $(GOBIN)/staticcheck
5
+ BENCH_FLAGS ?= -cpuprofile=cpu.pprof -memprofile=mem.pprof -benchmem
6
+
7
+ # Directories containing independent Go modules.
8
+ #
9
+ # We track coverage only for the main module.
10
+ MODULE_DIRS = . ./benchmarks
11
+
12
+ # Many Go tools take file globs or directories as arguments instead of packages.
13
+ GO_FILES := $(shell \
14
+ find . '(' -path '*/.*' -o -path './vendor' ')' -prune \
15
+ -o -name '*.go' -print | cut -b3-)
16
+
17
+ .PHONY: all
18
+ all: lint test
19
+
20
+ .PHONY: lint
21
+ lint: $(GOLINT) $(STATICCHECK)
22
+ @rm -rf lint.log
23
+ @echo "Checking formatting..."
24
+ @gofmt -d -s $(GO_FILES) 2>&1 | tee lint.log
25
+ @echo "Checking vet..."
26
+ @$(foreach dir,$(MODULE_DIRS),(cd $(dir) && go vet ./... 2>&1) &&) true | tee -a lint.log
27
+ @echo "Checking lint..."
28
+ @$(foreach dir,$(MODULE_DIRS),(cd $(dir) && $(GOLINT) ./... 2>&1) &&) true | tee -a lint.log
29
+ @echo "Checking staticcheck..."
30
+ @$(foreach dir,$(MODULE_DIRS),(cd $(dir) && $(STATICCHECK) ./... 2>&1) &&) true | tee -a lint.log
31
+ @echo "Checking for unresolved FIXMEs..."
32
+ @git grep -i fixme | grep -v -e Makefile | tee -a lint.log
33
+ @echo "Checking for license headers..."
34
+ @./checklicense.sh | tee -a lint.log
35
+ @[ ! -s lint.log ]
36
+
37
+ $(GOLINT):
38
+ go install golang.org/x/lint/golint
39
+
40
+ $(STATICCHECK):
41
+ go install honnef.co/go/tools/cmd/staticcheck
42
+
43
+ .PHONY: test
44
+ test:
45
+ @$(foreach dir,$(MODULE_DIRS),(cd $(dir) && go test -race ./...) &&) true
46
+
47
+ .PHONY: cover
48
+ cover:
49
+ go test -race -coverprofile=cover.out -coverpkg=./... ./...
50
+ go tool cover -html=cover.out -o cover.html
51
+
52
+ .PHONY: bench
53
+ BENCH ?= .
54
+ bench:
55
+ @$(foreach dir,$(MODULE_DIRS), ( \
56
+ cd $(dir) && \
57
+ go list ./... | xargs -n1 go test -bench=$(BENCH) -run="^$$" $(BENCH_FLAGS) \
58
+ ) &&) true
59
+
60
+ .PHONY: updatereadme
61
+ updatereadme:
62
+ rm -f README.md
63
+ cat .readme.tmpl | go run internal/readme/readme.go > README.md
@@ -0,0 +1,134 @@
1
+ # :zap: zap [![GoDoc][doc-img]][doc] [![Build Status][ci-img]][ci] [![Coverage Status][cov-img]][cov]
2
+
3
+ Blazing fast, structured, leveled logging in Go.
4
+
5
+ ## Installation
6
+
7
+ `go get -u go.uber.org/zap`
8
+
9
+ Note that zap only supports the two most recent minor versions of Go.
10
+
11
+ ## Quick Start
12
+
13
+ In contexts where performance is nice, but not critical, use the
14
+ `SugaredLogger`. It's 4-10x faster than other structured logging
15
+ packages and includes both structured and `printf`-style APIs.
16
+
17
+ ```go
18
+ logger, _ := zap.NewProduction()
19
+ defer logger.Sync() // flushes buffer, if any
20
+ sugar := logger.Sugar()
21
+ sugar.Infow("failed to fetch URL",
22
+ // Structured context as loosely typed key-value pairs.
23
+ "url", url,
24
+ "attempt", 3,
25
+ "backoff", time.Second,
26
+ )
27
+ sugar.Infof("Failed to fetch URL: %s", url)
28
+ ```
29
+
30
+ When performance and type safety are critical, use the `Logger`. It's even
31
+ faster than the `SugaredLogger` and allocates far less, but it only supports
32
+ structured logging.
33
+
34
+ ```go
35
+ logger, _ := zap.NewProduction()
36
+ defer logger.Sync()
37
+ logger.Info("failed to fetch URL",
38
+ // Structured context as strongly typed Field values.
39
+ zap.String("url", url),
40
+ zap.Int("attempt", 3),
41
+ zap.Duration("backoff", time.Second),
42
+ )
43
+ ```
44
+
45
+ See the [documentation][doc] and [FAQ](FAQ.md) for more details.
46
+
47
+ ## Performance
48
+
49
+ For applications that log in the hot path, reflection-based serialization and
50
+ string formatting are prohibitively expensive — they're CPU-intensive
51
+ and make many small allocations. Put differently, using `encoding/json` and
52
+ `fmt.Fprintf` to log tons of `interface{}`s makes your application slow.
53
+
54
+ Zap takes a different approach. It includes a reflection-free, zero-allocation
55
+ JSON encoder, and the base `Logger` strives to avoid serialization overhead
56
+ and allocations wherever possible. By building the high-level `SugaredLogger`
57
+ on that foundation, zap lets users *choose* when they need to count every
58
+ allocation and when they'd prefer a more familiar, loosely typed API.
59
+
60
+ As measured by its own [benchmarking suite][], not only is zap more performant
61
+ than comparable structured logging packages — it's also faster than the
62
+ standard library. Like all benchmarks, take these with a grain of salt.<sup
63
+ id="anchor-versions">[1](#footnote-versions)</sup>
64
+
65
+ Log a message and 10 fields:
66
+
67
+ | Package | Time | Time % to zap | Objects Allocated |
68
+ | :------ | :--: | :-----------: | :---------------: |
69
+ | :zap: zap | 862 ns/op | +0% | 5 allocs/op
70
+ | :zap: zap (sugared) | 1250 ns/op | +45% | 11 allocs/op
71
+ | zerolog | 4021 ns/op | +366% | 76 allocs/op
72
+ | go-kit | 4542 ns/op | +427% | 105 allocs/op
73
+ | apex/log | 26785 ns/op | +3007% | 115 allocs/op
74
+ | logrus | 29501 ns/op | +3322% | 125 allocs/op
75
+ | log15 | 29906 ns/op | +3369% | 122 allocs/op
76
+
77
+ Log a message with a logger that already has 10 fields of context:
78
+
79
+ | Package | Time | Time % to zap | Objects Allocated |
80
+ | :------ | :--: | :-----------: | :---------------: |
81
+ | :zap: zap | 126 ns/op | +0% | 0 allocs/op
82
+ | :zap: zap (sugared) | 187 ns/op | +48% | 2 allocs/op
83
+ | zerolog | 88 ns/op | -30% | 0 allocs/op
84
+ | go-kit | 5087 ns/op | +3937% | 103 allocs/op
85
+ | log15 | 18548 ns/op | +14621% | 73 allocs/op
86
+ | apex/log | 26012 ns/op | +20544% | 104 allocs/op
87
+ | logrus | 27236 ns/op | +21516% | 113 allocs/op
88
+
89
+ Log a static string, without any context or `printf`-style templating:
90
+
91
+ | Package | Time | Time % to zap | Objects Allocated |
92
+ | :------ | :--: | :-----------: | :---------------: |
93
+ | :zap: zap | 118 ns/op | +0% | 0 allocs/op
94
+ | :zap: zap (sugared) | 191 ns/op | +62% | 2 allocs/op
95
+ | zerolog | 93 ns/op | -21% | 0 allocs/op
96
+ | go-kit | 280 ns/op | +137% | 11 allocs/op
97
+ | standard library | 499 ns/op | +323% | 2 allocs/op
98
+ | apex/log | 1990 ns/op | +1586% | 10 allocs/op
99
+ | logrus | 3129 ns/op | +2552% | 24 allocs/op
100
+ | log15 | 3887 ns/op | +3194% | 23 allocs/op
101
+
102
+ ## Development Status: Stable
103
+
104
+ All APIs are finalized, and no breaking changes will be made in the 1.x series
105
+ of releases. Users of semver-aware dependency management systems should pin
106
+ zap to `^1`.
107
+
108
+ ## Contributing
109
+
110
+ We encourage and support an active, healthy community of contributors &mdash;
111
+ including you! Details are in the [contribution guide](CONTRIBUTING.md) and
112
+ the [code of conduct](CODE_OF_CONDUCT.md). The zap maintainers keep an eye on
113
+ issues and pull requests, but you can also report any negative conduct to
114
+ oss-conduct@uber.com. That email list is a private, safe space; even the zap
115
+ maintainers don't have access, so don't hesitate to hold us to a high
116
+ standard.
117
+
118
+ <hr>
119
+
120
+ Released under the [MIT License](LICENSE.txt).
121
+
122
+ <sup id="footnote-versions">1</sup> In particular, keep in mind that we may be
123
+ benchmarking against slightly older versions of other packages. Versions are
124
+ pinned in the [benchmarks/go.mod][] file. [↩](#anchor-versions)
125
+
126
+ [doc-img]: https://godoc.org/go.uber.org/zap?status.svg
127
+ [doc]: https://godoc.org/go.uber.org/zap
128
+ [ci-img]: https://travis-ci.com/uber-go/zap.svg?branch=master
129
+ [ci]: https://travis-ci.com/uber-go/zap
130
+ [cov-img]: https://codecov.io/gh/uber-go/zap/branch/master/graph/badge.svg
131
+ [cov]: https://codecov.io/gh/uber-go/zap
132
+ [benchmarking suite]: https://github.com/uber-go/zap/tree/master/benchmarks
133
+ [benchmarks/go.mod]: https://github.com/uber-go/zap/blob/master/benchmarks/go.mod
134
+