ginのログ出力先をsyslogにする
こんなかんじ
package main import "github.com/gin-gonic/gin" import "log/syslog" func main() { logger, err := syslog.New( syslog.LOG_NOTICE|syslog.LOG_USER, "gin-test") if err != nil { panic(err) } gin.SetMode(gin.ReleaseMode) gin.DisableConsoleColor() gin.DefaultWriter = logger app := gin.Default() grp := app.Group("/api") grp.GET("/", func(ctx *gin.Context) { ctx.JSON(200, gin.H{"message": "ok"}) }) app.Run("localhost:3000") }
まぁでもsupervisorとか使うだろうからログも標準出力にだして、あとはsupervisorに任せればよいでしょう。(※と、当初書いたけれど、systemdでやればいいんじゃないのって言われたが、とりあえず記事はそのまま残しておく。)
RHEL8系の場合、
sudo dnf install epel-release
ってやって(すでにやってあれば当然不要)
sudo yum -y install supervisor
とかやるとインストールされ、設定ファイルは /etc/supervisord.conf になっているので、そのなかに設定を追記するなり、設定ファイルをよく見るとわかるように /etc/supervisord.d/*.iniが読み込まれるようになっているのでそれにマッチする個別の設定ファイルを置くなりして自分のプログラムがsupervisordに起動されるようにすればよい。
例えば自分のプログラムがapiという名前で識別されるようにしたかったら、/etc/supervisord.d/api.ini などといった名前のファイルを作って、その中に
[program:api] command=/usr/local/bin/api autostart=true autorestart=true stderr_logfile=/var/log/api.err.log stderr_logfile=/var/log/api.out.log
などと書いてやればよいだろう。
ってsupervisorの話のほうが長くなった。