2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

WebAPIのログを日付でローテーションする

Posted at

echoでログを出力するには、公式ドキュメントではmiddleware.Logger()と記載されている。
middleware#Logger

main.go

package main

import (
    "net/http"
    "github.com/labstack/echo/v4"
    "github.com/labstack/echo/v4/middleware"
)

func main() {
    // Echo instance
    e := echo.New()

    // Middleware
    e.Use(middleware.Logger())
    e.Use(middleware.Recover())

    // Routes
    e.GET("/", hello)

    // Start server
    e.Logger.Fatal(e.Start(":1323"))
}

// Handler
func hello(c echo.Context) error {
    return c.String(http.StatusOK, "Hello, World!")
}

middleware.Logger()でのデフォルトの出力先はos.Stdoutなのでコンソールに出力される。

hoge.go
DefaultLoggerConfig = LoggerConfig{
  Skipper: DefaultSkipper,
  Format: `{"time":"${time_rfc3339_nano}","id":"${id}","remote_ip":"${remote_ip}","host":"${host}",` +
    `"method":"${method}","uri":"${uri}","status":${status},"error":"${error}","latency":${latency},` +
    `"latency_human":"${latency_human}","bytes_in":${bytes_in},` +
    `"bytes_out":${bytes_out}}` + "\n",
  Output: os.Stdout
}

ファイルに出力するにはos.OpenFile()の戻り値をOutputに指定する。
os.OpenFile()の引数は以下を指定する。

  1. ファイル名・・・日付を含むファイル名を指定する。
  2. 操作方法・・・os.O_RDWR|os.O_CREATE(読み書き可能かつ、存在しない場合は新規作成する)
  3. パーミッション・・・0664
main.go

package main

import (
    "net/http"
    "github.com/labstack/echo/v4"
    "github.com/labstack/echo/v4/middleware"
)

func main() {
    // Echo instance
    e := echo.New()

    // Middleware
    today := time.Now()
    logfilename := "/log/app-" + today.Format("20060102") + ".log"

    log, err := os.OpenFile(logfilename, os.O_RDWR|os.O_CREATE, 0664)
    if err != nil {
    	return e
    }
    e.Use(middleware.LoggerWithConfig(middleware.LoggerConfig{
    	Output: log,
    }))
    e.Use(middleware.Recover())

    // Routes
    e.GET("/", hello)

    // Start server
    e.Logger.Fatal(e.Start(":1323"))
}

// Handler
func hello(c echo.Context) error {
    return c.String(http.StatusOK, "Hello, World!")
}

簡易的だがechoの起動日単位でログファイルをローテションできる。
サービスを止めないでログをローテーションする方法を次は考えておきたい。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?