1package log_test
2
3import (
4	"fmt"
5	"net/http"
6
7	"gitlab.com/gitlab-org/labkit/log"
8)
9
10func ExampleInitialize() {
11	// Initialize the global logger
12	closer, err := log.Initialize(
13		log.WithFormatter("json"),    // Use JSON formatting
14		log.WithLogLevel("info"),     // Use info level
15		log.WithOutputName("stderr"), // Output to stderr
16	)
17	defer closer.Close()
18	log.WithError(err).Info("This has been logged")
19
20	// Example of configuring a non-global logger using labkit
21	myLogger := log.New() // New logrus logger
22	closer2, err := log.Initialize(
23		log.WithLogger(myLogger),                  // Tell logkit to initialize myLogger
24		log.WithFormatter("text"),                 // Use text formatting
25		log.WithLogLevel("debug"),                 // Use debug level
26		log.WithOutputName("/var/log/labkit.log"), // Output to `/var/log/labkit.log`
27	)
28	defer closer2.Close()
29
30	log.WithError(err).Info("This has been logged")
31}
32
33func ExampleAccessLogger() {
34	handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
35		fmt.Fprintf(w, "Hello world")
36	})
37
38	// This func is used by WithExtraFields to add additional fields to the logger
39	extraFieldGenerator := func(r *http.Request) log.Fields {
40		return log.Fields{"header": r.Header.Get("X-Magical-Header")}
41	}
42
43	http.ListenAndServe(":8080",
44		log.AccessLogger(handler, // Add accesslogger middleware
45			log.WithExtraFields(extraFieldGenerator),                          // Include custom fields into the logs
46			log.WithFieldsExcluded(log.HTTPRequestReferrer|log.HTTPUserAgent), // Exclude user-agent and referrer fields from the logs
47		),
48	)
49}
50