first version
This commit is contained in:
commit
d2076e5a8d
21
LICENSE
Normal file
21
LICENSE
Normal file
@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright Nils Stinnesbeck
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
40
README.md
Normal file
40
README.md
Normal file
@ -0,0 +1,40 @@
|
||||
# log
|
||||
|
||||
Package log provides a uniform method of logging.
|
||||
|
||||
## how to use this?
|
||||
|
||||
just import this module into your Go project by adding the following
|
||||
line to your imports:
|
||||
```go
|
||||
log "git.stinnesbeck.com/go/log"
|
||||
```
|
||||
|
||||
You can use this package in your code as follows:
|
||||
```go
|
||||
log.Print(LOGLEVEL, "This is your message of type LOGLEVEL")
|
||||
log.PrintInfo("This is your info message")
|
||||
log.PrintWarning("This is your warning message")
|
||||
log.PrintError("This is your error message")
|
||||
log.PrintDebug("This is your debug message")
|
||||
```
|
||||
|
||||
## Log levels
|
||||
|
||||
The following log levels are supported:
|
||||
|
||||
| LogLevel | Name |
|
||||
|----------|---------|
|
||||
| 0 | ERROR |
|
||||
| 1 | WARNING |
|
||||
| 2 | INFO |
|
||||
| 3 | DEBUG |
|
||||
|
||||
The package will honor a globally set environment variable `LOGLEVEL`. The package will only print levels that are less or equal than the one provided (e.g. `WARNING` will only print `ERROR` and `WARNING`). If no environment variable is set or it can't be parsed into the names above, ERROR will be selected as the default.
|
||||
|
||||
## Example usage
|
||||
|
||||
You can see an example output by cloning this repo and executing:
|
||||
```go
|
||||
go test
|
||||
```
|
11
go.mod
Normal file
11
go.mod
Normal file
@ -0,0 +1,11 @@
|
||||
module git.stinnesbeck.com/go/log
|
||||
|
||||
go 1.20
|
||||
|
||||
require github.com/fatih/color v1.15.0
|
||||
|
||||
require (
|
||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||
github.com/mattn/go-isatty v0.0.17 // indirect
|
||||
golang.org/x/sys v0.6.0 // indirect
|
||||
)
|
10
go.sum
Normal file
10
go.sum
Normal file
@ -0,0 +1,10 @@
|
||||
github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs=
|
||||
github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
|
||||
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
|
||||
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
|
||||
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
||||
github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng=
|
||||
github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
|
||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
111
log.go
Normal file
111
log.go
Normal file
@ -0,0 +1,111 @@
|
||||
// Package log provides a uniform method of logging for
|
||||
// all go projects at plusserver
|
||||
package log
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/fatih/color"
|
||||
)
|
||||
|
||||
// LogLevel is our custom type that represents the different log levels
|
||||
type LogLevel int
|
||||
|
||||
// Log levels that can be assigned to the WriteLog function
|
||||
const (
|
||||
ERROR LogLevel = iota
|
||||
WARNING
|
||||
INFO
|
||||
DEBUG
|
||||
)
|
||||
|
||||
// This implements the String representation for our custom type logLevel
|
||||
func (l LogLevel) String() string {
|
||||
switch l {
|
||||
case WARNING:
|
||||
return "WARNING"
|
||||
case ERROR:
|
||||
return "ERROR"
|
||||
case INFO:
|
||||
return "INFO"
|
||||
default:
|
||||
return "DEBUG"
|
||||
}
|
||||
}
|
||||
|
||||
// colorOutput colors the output of a given message according to logLevel
|
||||
func colorOutput(message string, logLevel LogLevel) {
|
||||
switch logLevel {
|
||||
case WARNING:
|
||||
color.Yellow(message)
|
||||
case ERROR:
|
||||
color.Red(message)
|
||||
case DEBUG:
|
||||
color.HiBlack(message)
|
||||
default:
|
||||
color.Green(message)
|
||||
}
|
||||
}
|
||||
|
||||
func parseLogLevel(s string) LogLevel {
|
||||
switch s {
|
||||
case "DEBUG":
|
||||
return DEBUG
|
||||
case "INFO":
|
||||
return INFO
|
||||
case "WARNING":
|
||||
return WARNING
|
||||
default:
|
||||
return ERROR
|
||||
}
|
||||
}
|
||||
|
||||
// Print writes the given text to the console and formats it properly.
|
||||
// If no level is not provided or is unknown it will treat it as "INFO".
|
||||
//
|
||||
// Use the constants provided by this package for the available levels.
|
||||
func Print(printLevel LogLevel, message ...any) {
|
||||
// log level set by environment variable
|
||||
var envLogLevel LogLevel
|
||||
if l := os.Getenv("LOGLEVEL"); l != "" {
|
||||
envLogLevel = parseLogLevel(l)
|
||||
}
|
||||
|
||||
// don't do anything if the requested print level is lower than the run level
|
||||
if printLevel > envLogLevel {
|
||||
return
|
||||
}
|
||||
|
||||
// get a timestamp for the log message
|
||||
timeStamp := time.Now().Format("[2006-01-02 15:04:05]")
|
||||
|
||||
// assemble the log message
|
||||
logMessage := fmt.Sprintf("%s [%s]", timeStamp, printLevel)
|
||||
for i := range message {
|
||||
logMessage += " "
|
||||
logMessage += fmt.Sprintf("%v", message[i])
|
||||
}
|
||||
colorOutput(logMessage, printLevel)
|
||||
}
|
||||
|
||||
// PrintInfo is a Wrapper for Print(INFO, message)
|
||||
func PrintInfo(message ...any) {
|
||||
Print(INFO, message...)
|
||||
}
|
||||
|
||||
// PrintWarning is a Wrapper for Print(WARNING, message)
|
||||
func PrintWarning(message ...any) {
|
||||
Print(WARNING, message...)
|
||||
}
|
||||
|
||||
// PrintError is a Wrapper for Print(ERROR, message)
|
||||
func PrintError(message ...any) {
|
||||
Print(ERROR, message...)
|
||||
}
|
||||
|
||||
// PrintDebug is a Wrapper for Print(DEBUG, message)
|
||||
func PrintDebug(message ...any) {
|
||||
Print(DEBUG, message...)
|
||||
}
|
42
log_test.go
Normal file
42
log_test.go
Normal file
@ -0,0 +1,42 @@
|
||||
package log
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestPrint(t *testing.T) {
|
||||
t.Setenv("LOGLEVEL", "DEBUG")
|
||||
Print(DEBUG, "Testing DEBUG")
|
||||
Print(DEBUG, "Testing DEBUG", 1, 2.3456, true)
|
||||
Print(INFO, "Testing INFO")
|
||||
Print(INFO, "Testing INFO", 1, 2.3456, true)
|
||||
Print(WARNING, "Testing WARNING")
|
||||
Print(WARNING, "Testing WARNING", 1, 2.3456, true)
|
||||
Print(ERROR, "Testing ERROR")
|
||||
Print(ERROR, "Testing ERROR", 1, 2.3456, true)
|
||||
}
|
||||
|
||||
func TestPrintDebug(t *testing.T) {
|
||||
t.Setenv("LOGLEVEL", "DEBUG")
|
||||
PrintDebug("Testing DEBUG")
|
||||
PrintDebug("Testing DEBUG", 1, 2.3456, true)
|
||||
}
|
||||
|
||||
func TestPrintInfo(t *testing.T) {
|
||||
t.Setenv("LOGLEVEL", "INFO")
|
||||
PrintInfo("Testing INFO")
|
||||
PrintInfo("Testing INFO", 1, 2.3456, true)
|
||||
Print(DEBUG, "Testing DEBUG")
|
||||
}
|
||||
|
||||
func TestPrintWarning(t *testing.T) {
|
||||
t.Setenv("LOGLEVEL", "WARNING")
|
||||
PrintWarning("Testing WARNING")
|
||||
PrintWarning("Testing WARNING", 1, 2.3456, true)
|
||||
PrintInfo("Testing INFO")
|
||||
}
|
||||
|
||||
func TestPrintError(t *testing.T) {
|
||||
t.Setenv("LOGLEVEL", "ERROR")
|
||||
PrintError("Testing ERROR")
|
||||
PrintError("Testing ERROR", 1, 2.3456, true)
|
||||
PrintWarning("Testing WARNING")
|
||||
}
|
Loading…
Reference in New Issue
Block a user