mirror of
https://github.com/shlldev/miniws.git
synced 2025-09-03 11:20:59 +02:00
implemented log rename after size exceeds configurable limit
This commit is contained in:
2
go.mod
2
go.mod
@@ -3,3 +3,5 @@ module github.com/shlldev/miniws
|
|||||||
go 1.24.5
|
go 1.24.5
|
||||||
|
|
||||||
require github.com/akamensky/argparse v1.4.0
|
require github.com/akamensky/argparse v1.4.0
|
||||||
|
|
||||||
|
require github.com/google/uuid v1.6.0 // indirect
|
||||||
|
2
go.sum
2
go.sum
@@ -1,2 +1,4 @@
|
|||||||
github.com/akamensky/argparse v1.4.0 h1:YGzvsTqCvbEZhL8zZu2AiA5nq805NZh75JNj4ajn1xc=
|
github.com/akamensky/argparse v1.4.0 h1:YGzvsTqCvbEZhL8zZu2AiA5nq805NZh75JNj4ajn1xc=
|
||||||
github.com/akamensky/argparse v1.4.0/go.mod h1:S5kwC7IuDcEr5VeXtGPRVZ5o/FdhcMlQz4IZQuw64xA=
|
github.com/akamensky/argparse v1.4.0/go.mod h1:S5kwC7IuDcEr5VeXtGPRVZ5o/FdhcMlQz4IZQuw64xA=
|
||||||
|
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||||
|
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
|
4
main.go
4
main.go
@@ -13,6 +13,7 @@ const (
|
|||||||
HELP_LOGFOLDER string = "the logs folder"
|
HELP_LOGFOLDER string = "the logs folder"
|
||||||
HELP_CONFIGFOLDER string = "the configurations folder"
|
HELP_CONFIGFOLDER string = "the configurations folder"
|
||||||
HELP_WWWFOLDER string = "the www folder where miniws will look for files to serve"
|
HELP_WWWFOLDER string = "the www folder where miniws will look for files to serve"
|
||||||
|
HELP_MAXLOGBYTES string = "the maximum bytes after which the log files get split"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
@@ -22,6 +23,7 @@ func main() {
|
|||||||
logFolder := parser.String("l", "logs-folder", &argparse.Options{Default: "logs", Help: HELP_LOGFOLDER})
|
logFolder := parser.String("l", "logs-folder", &argparse.Options{Default: "logs", Help: HELP_LOGFOLDER})
|
||||||
configFolder := parser.String("c", "config-folder", &argparse.Options{Default: "config", Help: HELP_CONFIGFOLDER})
|
configFolder := parser.String("c", "config-folder", &argparse.Options{Default: "config", Help: HELP_CONFIGFOLDER})
|
||||||
wwwFolder := parser.String("w", "www-folder", &argparse.Options{Default: ".", Help: HELP_WWWFOLDER})
|
wwwFolder := parser.String("w", "www-folder", &argparse.Options{Default: ".", Help: HELP_WWWFOLDER})
|
||||||
|
maxLogBytes := parser.Int("b", "max-log-bytes", &argparse.Options{Default: 1024, Help: HELP_WWWFOLDER})
|
||||||
|
|
||||||
err := parser.Parse(os.Args)
|
err := parser.Parse(os.Args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -31,6 +33,6 @@ func main() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
webserver := miniws.NewWebServer(*port, *logFolder, *configFolder, *wwwFolder)
|
webserver := miniws.NewWebServer(*port, *logFolder, *configFolder, *wwwFolder, int64(*maxLogBytes))
|
||||||
webserver.Run()
|
webserver.Run()
|
||||||
}
|
}
|
||||||
|
@@ -4,6 +4,8 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
|
"github.com/google/uuid"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -15,12 +17,14 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type Logger struct {
|
type Logger struct {
|
||||||
logFolder string
|
logFolder string
|
||||||
|
maxLogBytes int64
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewLogger(logFolder_ string) *Logger {
|
func NewLogger(logFolder_ string, maxLogBytes_ int64) *Logger {
|
||||||
return &Logger{
|
return &Logger{
|
||||||
logFolder: logFolder_,
|
logFolder: logFolder_,
|
||||||
|
maxLogBytes: maxLogBytes_,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -41,22 +45,34 @@ func (l *Logger) logAccess(
|
|||||||
remoteAddr, identifier, authuser, timestamp, request, status, bytesSent, referer, user_agent,
|
remoteAddr, identifier, authuser, timestamp, request, status, bytesSent, referer, user_agent,
|
||||||
)
|
)
|
||||||
os.Mkdir(l.logFolder, os.ModeDir|os.ModePerm)
|
os.Mkdir(l.logFolder, os.ModeDir|os.ModePerm)
|
||||||
file, err := os.OpenFile(ensureSlashSuffix(l.logFolder)+FILENAME_ACCESSLOG, FLAGS_LOG_OPEN, PERMS_LOG_OPEN)
|
l.writeToLogFileAndRenameIfBig(FILENAME_ACCESSLOG, out)
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
log.Println("couldn't open log access file at", ensureSlashSuffix(l.logFolder)+FILENAME_ACCESSLOG)
|
|
||||||
}
|
|
||||||
defer file.Close()
|
|
||||||
file.WriteString(out)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *Logger) logError(str string) {
|
func (l *Logger) logError(str string) {
|
||||||
os.Mkdir(l.logFolder, PERMS_MKDIR)
|
os.Mkdir(l.logFolder, PERMS_MKDIR)
|
||||||
file, err := os.OpenFile(ensureSlashSuffix(l.logFolder)+FILENAME_ERRORLOG, FLAGS_LOG_OPEN, PERMS_LOG_OPEN)
|
l.writeToLogFileAndRenameIfBig(FILENAME_ERRORLOG, str+"\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *Logger) writeToLogFileAndRenameIfBig(filename, content string) {
|
||||||
|
file, err := os.OpenFile(ensureSlashSuffix(l.logFolder)+filename, FLAGS_LOG_OPEN, PERMS_LOG_OPEN)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println("couldn't open log error file at", ensureSlashSuffix(l.logFolder)+FILENAME_ERRORLOG)
|
log.Println("couldn't open log access file at", ensureSlashSuffix(l.logFolder)+filename)
|
||||||
}
|
}
|
||||||
|
|
||||||
defer file.Close()
|
defer file.Close()
|
||||||
file.WriteString(str + "\n")
|
file.WriteString(content)
|
||||||
|
|
||||||
|
fileinfo, err := file.Stat()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Error reading access file at", ensureSlashSuffix(l.logFolder)+filename)
|
||||||
|
}
|
||||||
|
|
||||||
|
if fileinfo.Size() > l.maxLogBytes {
|
||||||
|
defer os.Rename(ensureSlashSuffix(
|
||||||
|
l.logFolder)+fileinfo.Name(),
|
||||||
|
ensureSlashSuffix(l.logFolder)+fileinfo.Name()+"."+uuid.NewString(),
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -31,10 +31,10 @@ type WebServer struct {
|
|||||||
userAgentFilterMode FilterMode
|
userAgentFilterMode FilterMode
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewWebServer(port_ int, logFolder_, configFolder_, wwwFolder_ string) *WebServer {
|
func NewWebServer(port_ int, logFolder_, configFolder_, wwwFolder_ string, maxLogBytes_ int64) *WebServer {
|
||||||
|
|
||||||
return &WebServer{
|
return &WebServer{
|
||||||
logger: NewLogger(logFolder_),
|
logger: NewLogger(logFolder_, maxLogBytes_),
|
||||||
port: port_,
|
port: port_,
|
||||||
configFolder: configFolder_,
|
configFolder: configFolder_,
|
||||||
wwwFolder: wwwFolder_,
|
wwwFolder: wwwFolder_,
|
||||||
|
Reference in New Issue
Block a user