commit
f4df374a92
5 changed files with 284 additions and 0 deletions
-
3.gitignore
-
37Makefile
-
162logger.go
-
49message.go
-
33version.go.m4
@ -0,0 +1,3 @@ |
|||||
|
# Generated with m4 |
||||
|
version.go |
||||
|
.version* |
||||
@ -0,0 +1,37 @@ |
|||||
|
PACKAGE = gitlab.weird-web-workers.org/golang/logger |
||||
|
|
||||
|
SOURCES = version.go \
|
||||
|
logger.go \
|
||||
|
message.go |
||||
|
|
||||
|
VERSION = 0.0.1 |
||||
|
REVISION = $(shell git rev-parse HEAD) |
||||
|
BUILDTIME= "$(shell date -u +'%Y-%m-%dT%H:%M:%SZ')" |
||||
|
|
||||
|
GOOS = $(shell go env GOOS) |
||||
|
GOARCH = $(shell go env GOARCH) |
||||
|
|
||||
|
LIBRARY = $(GOPATH)/pkg/$(GOOS)_$(GOARCH)/$(PACKAGE).a |
||||
|
|
||||
|
.PHONY: all clean .version |
||||
|
|
||||
|
all: $(LIBRARY) |
||||
|
|
||||
|
$(LIBRARY): $(SOURCES) |
||||
|
go install $(PACKAGE) |
||||
|
|
||||
|
.version: |
||||
|
-@printf "%s\n%s\n%s" \
|
||||
|
"$(VERSION)" "$(REVISION)" "$(BUILDTIME)" >$@.new |
||||
|
-@diff $@ $@.new >/dev/null 2>&1 && rm $@.new || mv $@.new $@ |
||||
|
|
||||
|
version.go: version.go.m4 .version |
||||
|
-@m4 -Dm4_version=$(VERSION) \
|
||||
|
-Dm4_revision=$(REVISION) \
|
||||
|
-Dm4_build_time=$(BUILDTIME) \
|
||||
|
$< >$@ |
||||
|
|
||||
|
clean: |
||||
|
-@rm -f version.go 2>/dev/null |
||||
|
-@rm -f .version 2>/dev/null |
||||
|
-@rm -f $(LIBRARY) 2>/dev/null |
||||
@ -0,0 +1,162 @@ |
|||||
|
/* |
||||
|
Handle the applications logging needs/ |
||||
|
|
||||
|
Authors: |
||||
|
Georg Hopp <georg@steffers.org> |
||||
|
|
||||
|
Changes: |
||||
|
2018-10-02 [Georg Hopp] File created. |
||||
|
|
||||
|
Copyright © 2018 Georg Hopp |
||||
|
|
||||
|
This program is free software: you can redistribute it and/or modify |
||||
|
it under the terms of the GNU General Public License as published by |
||||
|
the Free Software Foundation, either version 3 of the License, or |
||||
|
(at your option) any later version. |
||||
|
|
||||
|
This program is distributed in the hope that it will be useful, |
||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
GNU General Public License for more details. |
||||
|
|
||||
|
You should have received a copy of the GNU General Public License |
||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
package logger |
||||
|
|
||||
|
import ( |
||||
|
"encoding/json" |
||||
|
"fmt" |
||||
|
"os" |
||||
|
"time" |
||||
|
) |
||||
|
|
||||
|
type Severity int |
||||
|
|
||||
|
const ( |
||||
|
DEBUG Severity = iota |
||||
|
INFO |
||||
|
WARNING |
||||
|
ERROR |
||||
|
FATAL |
||||
|
) |
||||
|
|
||||
|
var ( |
||||
|
SevStrings = [...]string{ |
||||
|
"DEBUG", |
||||
|
"INFO", |
||||
|
"WARNING", |
||||
|
"ERROR", |
||||
|
"FATAL", |
||||
|
} |
||||
|
) |
||||
|
|
||||
|
type Logger struct { |
||||
|
logLevel Severity |
||||
|
name string |
||||
|
} |
||||
|
|
||||
|
var Default = GetLogger(INFO, "default") |
||||
|
|
||||
|
func GetLogger(sev Severity, name string) *Logger { |
||||
|
logger := Logger{sev, name} |
||||
|
return &logger |
||||
|
} |
||||
|
|
||||
|
func SevStringToSeverity(sevStr string) (sev Severity) { |
||||
|
switch sevStr { |
||||
|
case SevStrings[DEBUG]: |
||||
|
sev = DEBUG |
||||
|
case SevStrings[INFO]: |
||||
|
sev = INFO |
||||
|
case SevStrings[WARNING]: |
||||
|
sev = WARNING |
||||
|
case SevStrings[FATAL]: |
||||
|
sev = FATAL |
||||
|
case SevStrings[ERROR]: |
||||
|
fallthrough |
||||
|
default: |
||||
|
sev = ERROR |
||||
|
} |
||||
|
return |
||||
|
} |
||||
|
|
||||
|
func SeverityToSevString(sev Severity) string { |
||||
|
return SevStrings[sev] |
||||
|
} |
||||
|
|
||||
|
func (logger *Logger) SetLevel(level Severity) { |
||||
|
logger.logLevel = level |
||||
|
} |
||||
|
|
||||
|
func (logger *Logger) logToJson( |
||||
|
sev Severity, format string, args ...interface{}) string { |
||||
|
|
||||
|
message, err := json.Marshal( |
||||
|
logMessage{ |
||||
|
time.Now().UTC().Format(time.RFC3339), |
||||
|
logger.name, |
||||
|
sev, |
||||
|
fmt.Sprintf(format, args...), |
||||
|
}) |
||||
|
if err != nil { |
||||
|
// TODO Making it fatal if no logging can be done is
|
||||
|
// kind of drastic
|
||||
|
os.Exit(1) |
||||
|
} |
||||
|
return string(message[:]) |
||||
|
} |
||||
|
|
||||
|
func (logger *Logger) log(sev Severity, format string, args ...interface{}) { |
||||
|
|
||||
|
var output *os.File |
||||
|
|
||||
|
if sev >= ERROR { |
||||
|
output = os.Stderr |
||||
|
} else { |
||||
|
output = os.Stdout |
||||
|
} |
||||
|
|
||||
|
if sev >= logger.logLevel { |
||||
|
fmt.Fprintln(output, logger.logToJson(sev, format, args...)) |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
func (logger *Logger) Debug(format string, args ...interface{}) { |
||||
|
logger.log(DEBUG, format, args...) |
||||
|
} |
||||
|
|
||||
|
func (logger *Logger) Info(format string, args ...interface{}) { |
||||
|
logger.log(INFO, format, args...) |
||||
|
} |
||||
|
|
||||
|
func (logger *Logger) Warning(format string, args ...interface{}) { |
||||
|
logger.log(WARNING, format, args...) |
||||
|
} |
||||
|
|
||||
|
func (logger *Logger) Error(format string, args ...interface{}) { |
||||
|
logger.log(ERROR, format, args...) |
||||
|
} |
||||
|
|
||||
|
func (logger *Logger) Panic(format string, args ...interface{}) { |
||||
|
logger.log(FATAL, format, args...) |
||||
|
panic(fmt.Sprintf(format, args...)) |
||||
|
} |
||||
|
|
||||
|
func (logger *Logger) LogError( |
||||
|
err error, format string, args ...interface{}) { |
||||
|
|
||||
|
if err != nil { |
||||
|
logger.Error("%s: %s", fmt.Sprintf(format, args...), err) |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
func (logger *Logger) FailOnError( |
||||
|
err error, format string, args ...interface{}) { |
||||
|
|
||||
|
if err != nil { |
||||
|
logger.Panic("%s: %s", fmt.Sprintf(format, args...), err) |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// vim: ts=4 sts=4 sw=4 noet tw=72:
|
||||
@ -0,0 +1,49 @@ |
|||||
|
/* |
||||
|
Handle the applications logging needs/ |
||||
|
|
||||
|
Authors: |
||||
|
Georg Hopp <georg@steffers.org> |
||||
|
|
||||
|
Changes: |
||||
|
2018-10-02 [Georg Hopp] File created. |
||||
|
|
||||
|
Copyright © 2018 Georg Hopp |
||||
|
|
||||
|
This program is free software: you can redistribute it and/or modify |
||||
|
it under the terms of the GNU General Public License as published by |
||||
|
the Free Software Foundation, either version 3 of the License, or |
||||
|
(at your option) any later version. |
||||
|
|
||||
|
This program is distributed in the hope that it will be useful, |
||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
GNU General Public License for more details. |
||||
|
|
||||
|
You should have received a copy of the GNU General Public License |
||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
package logger |
||||
|
|
||||
|
import ( |
||||
|
"fmt" |
||||
|
) |
||||
|
|
||||
|
type logMessage struct { |
||||
|
Time string `json:"time"` |
||||
|
Logger string `json:"logger"` |
||||
|
Severity Severity `json:"severity"` |
||||
|
Message string `json:"message"` |
||||
|
} |
||||
|
|
||||
|
func (sev Severity) MarshalJSON() (data []byte, err error) { |
||||
|
if int(sev) > len(SevStrings)-1 { |
||||
|
data = nil |
||||
|
err = fmt.Errorf("Unable to marshal unknown severity: %d", sev) |
||||
|
} else { |
||||
|
data = []byte("\"" + SevStrings[sev] + "\"") |
||||
|
err = nil |
||||
|
} |
||||
|
return |
||||
|
} |
||||
|
|
||||
|
// vim: ts=4 sts=4 sw=4 noet tw=72:
|
||||
@ -0,0 +1,33 @@ |
|||||
|
/* |
||||
|
Package version information. |
||||
|
|
||||
|
Authors: |
||||
|
Georg Hopp <georg@steffers.org> |
||||
|
|
||||
|
Changes: |
||||
|
2018-10-02 [Georg Hopp] File created. |
||||
|
|
||||
|
Copyright © 2018 Georg Hopp |
||||
|
|
||||
|
This program is free software: you can redistribute it and/or modify |
||||
|
it under the terms of the GNU General Public License as published by |
||||
|
the Free Software Foundation, either version 3 of the License, or |
||||
|
(at your option) any later version. |
||||
|
|
||||
|
This program is distributed in the hope that it will be useful, |
||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
GNU General Public License for more details. |
||||
|
|
||||
|
You should have received a copy of the GNU General Public License |
||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
|
*/ |
||||
|
package test |
||||
|
|
||||
|
const ( |
||||
|
VERSION = "m4_version" |
||||
|
REVISION = "m4_revision" |
||||
|
BUILD_TIME = "m4_build_time" |
||||
|
) |
||||
|
|
||||
|
// vim: ts=4 sts=4 sw=4 noet tw=72: |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue