Files
TorrServerJellyfin/server/log/log.go
nikk gitanes 391b08a09d unify log
2022-05-16 03:08:33 +03:00

112 lines
2.0 KiB
Go

package log
import (
"bytes"
"fmt"
"io/ioutil"
"log"
"os"
"strings"
"time"
"github.com/gin-gonic/gin"
)
var logPath = ""
var webLogPath = ""
var webLog *log.Logger
var logFile *os.File
var webLogFile *os.File
func Init(path, webpath string) {
webLogPath = webpath
logPath = path
if webpath != "" {
ff, err := os.OpenFile(webLogPath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
TLogln("Error create web log file:", err)
} else {
webLogFile = ff
webLog = log.New(ff, " ", log.LstdFlags)
}
}
if path != "" {
if fi, err := os.Lstat(path); err == nil {
if fi.Size() >= 100*1024*1024 { // 100MB
os.Remove(path)
}
}
ff, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
TLogln("Error create log file:", err)
return
}
logFile = ff
os.Stdout = ff
os.Stderr = ff
t := time.Now().Format("2006-01-02T15:04:05-0700")
log.SetFlags(log.Lmsgprefix)
log.SetPrefix(t + " SRV ")
log.SetOutput(ff)
}
}
func Close() {
if logFile != nil {
logFile.Close()
}
if webLogFile != nil {
webLogFile.Close()
}
}
func TLogln(v ...interface{}) {
log.Println(v...)
}
func WebLogln(v ...interface{}) {
if webLog != nil {
webLog.Println(v...)
}
}
func WebLogger() gin.HandlerFunc {
return func(c *gin.Context) {
if webLog == nil {
c.Next()
return
}
body := ""
//save body if not form or file
if !strings.HasPrefix(c.Request.Header.Get("Content-Type"), "multipart/form-data") {
body, _ := ioutil.ReadAll(c.Request.Body)
c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(body))
} else {
body = "body hidden, too large"
}
c.Next()
statusCode := c.Writer.Status()
clientIP := c.ClientIP()
method := c.Request.Method
path := c.Request.URL.Path
raw := c.Request.URL.RawQuery
if raw != "" {
path = path + "?" + raw
}
logStr := fmt.Sprintf("%3d | %12s | %-7s %#v %v",
statusCode,
clientIP,
method,
path,
string(body),
)
WebLogln(logStr)
}
}