plugin_httplog

package module
v0.1.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 16, 2020 License: Apache-2.0 Imports: 9 Imported by: 0

README

HTTP Log

This Traefik plugin is as middleware which logs HTTP requests, HTTP requests bodies, HTTP responses, HTTP responses bodies.

BE WARNED: THIS PLUGIN SHOULD NOT BE USED IN PRODUCTION! And logging bodies when they contain binaries will crash your instance! or create weird logs! It doesn't uncompress service responses.

Example (plugin in dev mode)

docker-compose.yml:

version: "3.3"

services:
  traefik:
    image: traefik:v2.3
    command:
      --api.insecure=true
      --entrypoints.web.address=:80
      --providers.docker=true
      --providers.docker.exposedbydefault=false
      --pilot.token=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
      --experimental.devplugin.gopath=/home/me/src/softwares/go
      --experimental.devplugin.modulename=github.com/trois-six/plugin-httplog
    ports:
      - 80:80
      - 8080:8080
    volumes:
      - /home/me/src/softwares/go:/home/me/src/softwares/go
      - /var/run/docker.sock:/var/run/docker.sock:ro
    networks:
      - test
  whoami:
    image: containous/whoami
    labels:
      traefik.enable: true
      traefik.http.routers.whoami.rule: Host(`localhost`)
      traefik.http.routers.whoami.entrypoints: web
      traefik.http.middlewares.my-plugin.plugin.dev.request: true
      traefik.http.middlewares.my-plugin.plugin.dev.requestbody: true
      traefik.http.middlewares.my-plugin.plugin.dev.response: true
      traefik.http.middlewares.my-plugin.plugin.dev.responsebody: true
      traefik.http.routers.whoami.middlewares: my-plugin
    networks:
      - test

networks:
  test:

stdout:

$ docker-compose up
Starting containous_traefik_1 ... done
Starting containous_whoami_1  ... done
Attaching to containous_whoami_1, containous_traefik_1
whoami_1   | Starting up on port 80
traefik_1  | time="2020-08-11T06:40:50Z" level=info msg="Configuration loaded from flags."
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] ********* REQUEST *********
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] POST / HTTP/1.1
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] Host: localhost
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] Accept: */*
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] Content-Length: 7
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] Content-Type: application/x-www-form-urlencoded
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] User-Agent: curl/7.68.0
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] X-Forwarded-Host: localhost
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] X-Forwarded-Port: 80
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] X-Forwarded-Proto: http
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] X-Forwarded-Server: 69859b7e0970
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] X-Real-Ip: 172.25.0.1
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] 
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] foo=bar
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] 
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] ********* RESPONSE *********
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] HTTP/1.1 200 OK
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] Content-Length: 415
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] Content-Type: text/plain; charset=utf-8
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] Date: Tue, 11 Aug 2020 06:41:04 GMT
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] 
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] Hostname: e7d81b4f35bb
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] IP: 127.0.0.1
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] IP: 172.25.0.3
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] RemoteAddr: 172.25.0.2:54906
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] POST / HTTP/1.1
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] Host: localhost
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] User-Agent: curl/7.68.0
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] Content-Length: 7
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] Accept: */*
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] Accept-Encoding: gzip
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] Content-Type: application/x-www-form-urlencoded
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] X-Forwarded-For: 172.25.0.1
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] X-Forwarded-Host: localhost
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] X-Forwarded-Port: 80
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] X-Forwarded-Proto: http
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] X-Forwarded-Server: 69859b7e0970
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] X-Real-Ip: 172.25.0.1
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] 
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] foo=bar
traefik_1  | [HTTPLOG-MERF2vqIRb_Gh4H9HPO] 
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] ********* REQUEST *********
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] GET / HTTP/1.1
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] Host: localhost
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] Accept: */*
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] User-Agent: curl/7.68.0
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] X-Forwarded-Host: localhost
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] X-Forwarded-Port: 80
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] X-Forwarded-Proto: http
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] X-Forwarded-Server: 69859b7e0970
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] X-Real-Ip: 172.25.0.1
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] 
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] 
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] ********* RESPONSE *********
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] HTTP/1.1 200 OK
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] Content-Length: 339
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] Content-Type: text/plain; charset=utf-8
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] Date: Tue, 11 Aug 2020 06:41:29 GMT
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] 
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] Hostname: e7d81b4f35bb
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] IP: 127.0.0.1
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] IP: 172.25.0.3
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] RemoteAddr: 172.25.0.2:54906
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] GET / HTTP/1.1
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] Host: localhost
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] User-Agent: curl/7.68.0
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] Accept: */*
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] Accept-Encoding: gzip
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] X-Forwarded-For: 172.25.0.1
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] X-Forwarded-Host: localhost
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] X-Forwarded-Port: 80
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] X-Forwarded-Proto: http
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] X-Forwarded-Server: 69859b7e0970
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] X-Real-Ip: 172.25.0.1
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] 
traefik_1  | [HTTPLOG-MERF9-5QW2fJhvkbTP1] 

Configuration

To configure this plugin you should add its configuration to the Traefik dynamic configuration as explained here. The following snippet shows how to configure this plugin with the File provider in TOML and YAML:

# Log Requests and Responses
[http.middlewares]
  [http.middlewares.my-httplog.httplog]
    request = true
    requestBody = false
    response = true
    responseBody = false
# Log Requests and Responses
http:
  middlewares:
    my-httplog:
      plugin:
        httplog:
          request: true
          requestBody: true
          response: true
          responseBody: false

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func New

func New(_ context.Context, next http.Handler, config *Config, name string) (http.Handler, error)

New creates and returns a plugin instance.

Types

type Config

type Config struct {
	Request      bool `json:"request,omitempty"`
	RequestBody  bool `json:"requestbody,omitempty"`
	Response     bool `json:"response,omitempty"`
	ResponseBody bool `json:"responsebody,omitempty"`
}

Config holds the plugin configuration.

func CreateConfig

func CreateConfig() *Config

CreateConfig creates and initializes the plugin configuration.

type HTTPLog

type HTTPLog struct {
	Name       string
	Next       http.Handler
	Config     *Config
	LogHandler *log.Logger
}

HTTPLog is a httpLog plugin.

func (*HTTPLog) ServeHTTP

func (h *HTTPLog) ServeHTTP(rw http.ResponseWriter, req *http.Request)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL