201 lines
4.8 KiB
Go
201 lines
4.8 KiB
Go
|
package common
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"io"
|
||
|
"log"
|
||
|
"os"
|
||
|
)
|
||
|
|
||
|
var loglevel LogLevel
|
||
|
|
||
|
type LogLevel string
|
||
|
|
||
|
const (
|
||
|
LLError LogLevel = "error" // only log errors
|
||
|
LLChat LogLevel = "chat" // log chat and commands
|
||
|
LLInfo LogLevel = "info" // log info messages (not quite debug, but not chat)
|
||
|
LLDebug LogLevel = "debug" // log everything
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
logPrefixError string = "[ERROR] "
|
||
|
logPrefixChat string = "[CHAT] "
|
||
|
logPrefixInfo string = "[INFO] "
|
||
|
logPrefixDebug string = "[DEBUG] "
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
logError *log.Logger
|
||
|
logChat *log.Logger
|
||
|
logInfo *log.Logger
|
||
|
logDebug *log.Logger
|
||
|
)
|
||
|
|
||
|
func SetupLogging(level LogLevel, file string) error {
|
||
|
switch level {
|
||
|
case LLDebug:
|
||
|
if file == "" {
|
||
|
logError = log.New(os.Stderr, logPrefixError, log.LstdFlags)
|
||
|
logChat = log.New(os.Stdout, logPrefixChat, log.LstdFlags)
|
||
|
logDebug = log.New(os.Stdout, logPrefixDebug, log.LstdFlags)
|
||
|
logInfo = log.New(os.Stdout, logPrefixInfo, log.LstdFlags)
|
||
|
} else {
|
||
|
f, err := os.OpenFile(file, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("Unable to open log file for writing: %s", err)
|
||
|
}
|
||
|
logError = log.New(io.MultiWriter(os.Stderr, f), logPrefixError, log.LstdFlags)
|
||
|
logChat = log.New(io.MultiWriter(os.Stdout, f), logPrefixChat, log.LstdFlags)
|
||
|
logInfo = log.New(io.MultiWriter(os.Stdout, f), logPrefixInfo, log.LstdFlags)
|
||
|
logDebug = log.New(io.MultiWriter(os.Stdout, f), logPrefixDebug, log.LstdFlags)
|
||
|
}
|
||
|
case LLChat:
|
||
|
logDebug = nil
|
||
|
if file == "" {
|
||
|
logError = log.New(os.Stderr, logPrefixError, log.LstdFlags)
|
||
|
logChat = log.New(os.Stdout, logPrefixChat, log.LstdFlags)
|
||
|
logInfo = log.New(os.Stdout, logPrefixInfo, log.LstdFlags)
|
||
|
} else {
|
||
|
f, err := os.OpenFile(file, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("Unable to open log file for writing: %s", err)
|
||
|
}
|
||
|
logError = log.New(io.MultiWriter(os.Stderr, f), logPrefixError, log.LstdFlags)
|
||
|
logChat = log.New(io.MultiWriter(os.Stdout, f), logPrefixChat, log.LstdFlags)
|
||
|
logInfo = log.New(io.MultiWriter(os.Stdout, f), logPrefixInfo, log.LstdFlags)
|
||
|
}
|
||
|
|
||
|
case LLInfo:
|
||
|
logDebug = nil
|
||
|
logChat = nil
|
||
|
if file == "" {
|
||
|
logError = log.New(os.Stderr, logPrefixError, log.LstdFlags)
|
||
|
logInfo = log.New(os.Stdout, logPrefixInfo, log.LstdFlags)
|
||
|
} else {
|
||
|
f, err := os.OpenFile(file, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("Unable to open log file for writing: %s", err)
|
||
|
}
|
||
|
logError = log.New(io.MultiWriter(os.Stderr, f), logPrefixError, log.LstdFlags)
|
||
|
logInfo = log.New(io.MultiWriter(os.Stdout, f), logPrefixInfo, log.LstdFlags)
|
||
|
}
|
||
|
|
||
|
// Default to error
|
||
|
default:
|
||
|
logChat = nil
|
||
|
logDebug = nil
|
||
|
logInfo = nil
|
||
|
if file == "" {
|
||
|
logError = log.New(os.Stderr, logPrefixError, log.LstdFlags)
|
||
|
} else {
|
||
|
f, err := os.OpenFile(file, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("Unable to open log file for writing: %s", err)
|
||
|
}
|
||
|
logError = log.New(io.MultiWriter(os.Stderr, f), logPrefixError, log.LstdFlags)
|
||
|
}
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func LogErrorf(format string, v ...interface{}) {
|
||
|
if logError == nil {
|
||
|
panic("Logging not setup!")
|
||
|
}
|
||
|
|
||
|
logError.Printf(format, v...)
|
||
|
}
|
||
|
|
||
|
func LogErrorln(v ...interface{}) {
|
||
|
if logError == nil {
|
||
|
panic("Logging not setup!")
|
||
|
}
|
||
|
|
||
|
logError.Println(v...)
|
||
|
}
|
||
|
|
||
|
func LogChatf(format string, v ...interface{}) {
|
||
|
// if logError isn't set to something, logging wasn't setup.
|
||
|
if logError == nil {
|
||
|
panic("Logging not setup!")
|
||
|
}
|
||
|
|
||
|
// logging chat and commands is turned off.
|
||
|
if logChat == nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
logChat.Printf(format, v...)
|
||
|
}
|
||
|
|
||
|
func LogChatln(v ...interface{}) {
|
||
|
// if logError isn't set to something, logging wasn't setup.
|
||
|
if logError == nil {
|
||
|
panic("Logging not setup!")
|
||
|
}
|
||
|
|
||
|
// logging chat and commands is turned off.
|
||
|
if logChat == nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
logChat.Println(v...)
|
||
|
}
|
||
|
|
||
|
func LogInfof(format string, v ...interface{}) {
|
||
|
// if logError isn't set to something, logging wasn't setup.
|
||
|
if logError == nil {
|
||
|
panic("Logging not setup!")
|
||
|
}
|
||
|
|
||
|
// logging info is turned off.
|
||
|
if logInfo == nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
logInfo.Printf(format, v...)
|
||
|
}
|
||
|
|
||
|
func LogInfoln(v ...interface{}) {
|
||
|
// if logError isn't set to something, logging wasn't setup.
|
||
|
if logError == nil {
|
||
|
panic("Logging not setup!")
|
||
|
}
|
||
|
|
||
|
// logging info is turned off.
|
||
|
if logInfo == nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
logInfo.Println(v...)
|
||
|
}
|
||
|
|
||
|
func LogDebugf(format string, v ...interface{}) {
|
||
|
// if logError isn't set to something, logging wasn't setup.
|
||
|
if logError == nil {
|
||
|
panic("Logging not setup!")
|
||
|
}
|
||
|
|
||
|
// logging debug is turned off.
|
||
|
if logDebug == nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
logDebug.Printf(format, v...)
|
||
|
}
|
||
|
|
||
|
func LogDebugln(v ...interface{}) {
|
||
|
// if logError isn't set to something, logging wasn't setup.
|
||
|
if logError == nil {
|
||
|
panic("Logging not setup!")
|
||
|
}
|
||
|
|
||
|
// logging debug is turned off.
|
||
|
if logDebug == nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
logDebug.Println(v...)
|
||
|
}
|