This repository has been archived on 2021-08-10. You can view files and clone it, but cannot push or open issues or pull requests.
gtools/logger/logger.go
Michael 1c3869626a major changes to log logging is handled
Signed-off-by: Michael <michael.lindman@gmail.com>
2020-09-30 04:39:43 +01:00

82 lines
1.3 KiB
Go

package logger
import (
"io"
"io/ioutil"
"log"
"os"
"path/filepath"
)
// Logger Options
type Logger struct {
Error *File
Access *File
}
// File log file
type File struct {
Name string
File *os.File
}
// New instance of logger
func New(path string) (logger *Logger, err error) {
errorlog, err := open(path + "error.log")
if err != nil {
return nil, err
}
accesslog, err := open(path + "access.log")
if err != nil {
return nil, err
}
logger = &Logger{
Error: &File{
Name: "Error",
File: errorlog,
},
Access: &File{
Name: "Access",
File: accesslog,
},
}
return logger, nil
}
// open log file
func open(path string) (*os.File, error) {
dir, _ := filepath.Split(path)
if _, err := os.Stat(path); os.IsNotExist(err) {
os.Mkdir(dir, 0775)
}
file, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
file.Close()
return nil, err
}
return file, nil
}
// Write to log file
func (f *File) Write(e error) {
log.SetOutput(io.MultiWriter(os.Stderr, f.File))
log.Println(e)
}
// Read fril log file
func (f *File) Read() (file []byte, err error) {
file, err = ioutil.ReadAll(f.File)
if err != nil {
return nil, err
}
return file, nil
}
// Close log file
func (f *File) Close() error {
if err := f.File.Close(); err != nil {
return err
}
return nil
}