mirror of
https://github.com/gin-gonic/gin.git
synced 2025-05-22 20:30:44 +08:00
Merge 87d4db66086bed0abb1423605c6a81d9c85ee35b into ef68fa032c0e6ce637db56e89ec734c0de0a9f5e
This commit is contained in:
commit
18e3d5b72d
15
docs/doc.md
15
docs/doc.md
@ -22,6 +22,7 @@
|
|||||||
- [How to write log file](#how-to-write-log-file)
|
- [How to write log file](#how-to-write-log-file)
|
||||||
- [Custom Log Format](#custom-log-format)
|
- [Custom Log Format](#custom-log-format)
|
||||||
- [Controlling Log output coloring](#controlling-log-output-coloring)
|
- [Controlling Log output coloring](#controlling-log-output-coloring)
|
||||||
|
- [Avoid logging query strings](#avoid-loging-query-strings)
|
||||||
- [Model binding and validation](#model-binding-and-validation)
|
- [Model binding and validation](#model-binding-and-validation)
|
||||||
- [Custom Validators](#custom-validators)
|
- [Custom Validators](#custom-validators)
|
||||||
- [Only Bind Query String](#only-bind-query-string)
|
- [Only Bind Query String](#only-bind-query-string)
|
||||||
@ -591,6 +592,20 @@ func main() {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Avoid logging query strings
|
||||||
|
|
||||||
|
```go
|
||||||
|
func main() {
|
||||||
|
router := gin.New()
|
||||||
|
|
||||||
|
// SkipQueryString indicates that the logger should not log the query string.
|
||||||
|
// For example, /path?q=1 will be logged as /path
|
||||||
|
loggerConfig := gin.LoggerConfig{SkipQueryString: true}
|
||||||
|
|
||||||
|
router.Use(gin.LoggerWithConfig(loggerConfig))
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
### Model binding and validation
|
### Model binding and validation
|
||||||
|
|
||||||
To bind a request body into a type, use model binding. We currently support binding of JSON, XML, YAML, TOML and standard form values (foo=bar&boo=baz).
|
To bind a request body into a type, use model binding. We currently support binding of JSON, XML, YAML, TOML and standard form values (foo=bar&boo=baz).
|
||||||
|
@ -44,6 +44,11 @@ type LoggerConfig struct {
|
|||||||
// Optional. Default value is gin.DefaultWriter.
|
// Optional. Default value is gin.DefaultWriter.
|
||||||
Output io.Writer
|
Output io.Writer
|
||||||
|
|
||||||
|
// SkipQueryString indicates that query strings should not be written
|
||||||
|
// for cases such as when API keys are passed via query strings.
|
||||||
|
// Optional. Default value is false.
|
||||||
|
SkipQueryString bool
|
||||||
|
|
||||||
// SkipPaths is an url path array which logs are not written.
|
// SkipPaths is an url path array which logs are not written.
|
||||||
// Optional.
|
// Optional.
|
||||||
SkipPaths []string
|
SkipPaths []string
|
||||||
@ -270,7 +275,7 @@ func LoggerWithConfig(conf LoggerConfig) HandlerFunc {
|
|||||||
|
|
||||||
param.BodySize = c.Writer.Size()
|
param.BodySize = c.Writer.Size()
|
||||||
|
|
||||||
if raw != "" {
|
if raw != "" && !conf.SkipQueryString {
|
||||||
path = path + "?" + raw
|
path = path + "?" + raw
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -454,3 +454,17 @@ func TestForceConsoleColor(t *testing.T) {
|
|||||||
// reset console color mode.
|
// reset console color mode.
|
||||||
consoleColorMode = autoColor
|
consoleColorMode = autoColor
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestLoggerWithConfigSkipQueryString(t *testing.T) {
|
||||||
|
buffer := new(strings.Builder)
|
||||||
|
router := New()
|
||||||
|
router.Use(LoggerWithConfig(LoggerConfig{
|
||||||
|
Output: buffer,
|
||||||
|
SkipQueryString: true,
|
||||||
|
}))
|
||||||
|
router.GET("/logged", func(c *Context) { c.Status(http.StatusOK) })
|
||||||
|
|
||||||
|
PerformRequest(router, "GET", "/logged?a=21")
|
||||||
|
assert.Contains(t, buffer.String(), "200")
|
||||||
|
assert.NotContains(t, buffer.String(), "a=21")
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user