Skip to content

aaronvb/logparams

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

logparams

go.dev Reference GitHub Workflow Status (with event)

This is a Go middleware log output that prints parameters if present in the HTTP request. Currently supports PostForm, query params, and JSON body.

The output can be a string or printed directly to the logger. Recommend using with middleware, see example below.

Install

go get -u github.com/aaronvb/logparams

Usage

Using logger:

var logger log.Logger{} lp := logparams.LogParams{Request: r} lp.ToLogger(&logger)

Output to a string:

lp := logparams.LogParams{Request: r} lp.ToString()

Result:

Parameters: {"foo" => "bar", "hello" => "world"}

Returning data in struct:

lp := logparams.LogParams{Request: r} lp.ToFields()
type ParamFields struct { Form map[string]string Query map[string]string Json map[string]interface{} JsonArray []map[string]interface{} }

Middleware Example (using gorilla/mux)

package main import ( "fmt" "log" "net/http" "os" "github.com/aaronvb/logparams" "github.com/gorilla/mux" ) type application struct { errorLog *log.Logger infoLog *log.Logger } func main() { infoLog := log.New(os.Stdout, "INFO\t", log.Ldate|log.Ltime) errorLog := log.New(os.Stderr, "ERROR\t", log.Ldate|log.Ltime|log.Lshortfile) app := &application{ errorLog: errorLog, infoLog: infoLog,	} srv := &http.Server{ Addr: ":8080", ErrorLog: errorLog, Handler: app.routes(),	} infoLog.Printf("Starting server on %s", ":8080") err := srv.ListenAndServe() errorLog.Fatal(err) } func (app *application) routes() http.Handler { r := mux.NewRouter() r.HandleFunc("/foobar", app.foobar).Methods("POST") // Middleware r.Use(app.logRequest) r.Use(app.logParams) return r } func (app *application) foobar(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Hello world") } // Middleware func (app *application) logRequest(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { app.infoLog.Printf("%s - %s", r.Method, r.URL.RequestURI()) next.ServeHTTP(w, r)	}) } func (app *application) logParams(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { lp := logparams.LogParams{Request: r} lp.ToLogger(app.infoLog) next.ServeHTTP(w, r)	}) }
> go run main.go INFO	2020/03/22 11:14:49 Starting server on :8080 INFO	2020/03/22 11:14:51 POST - /foobar INFO	2020/03/22 11:15:18 Parameters: {"foo" => "bar"}

Optional Values

  • ShowEmpty (bool) will return an empty string, or not print to logger, if there are no parameters. Default is to false if struct arg is not passed.

  • ShowPassword (bool) will show the password and password_confirmation parameters. Default is false if not explicitly passed(DO NOT RECOMMEND).

  • HidePrefix (bool) will hide the Parameters: prefix in the output. Default is to false if struct arg is not passed.

About

Go HTTP request middleware that prints parameters in the HTTP request.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages