82 lines
1.3 KiB
Go
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
|
|
}
|