1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
go-log
==========
go-log is a simple logging library for Go which supports logging to
systemd.
### Examples
#### Default
This example uses the default log to log to standard out and (if available) to systemd:
```go
package main
import (
"github.com/coreos/go-log/log"
)
func main() {
log.Info("Hello World.")
log.Error("There's nothing more to this program.")
}
```
#### Using Sinks and Formats
```go
package main
import (
"github.com/coreos/go-log/log"
"os"
)
func main() {
l := log.NewSimple(
log.WriterSink(os.Stderr,
"%s: %s[%d] %s\n",
[]string{"priority", "executable", "pid", "message"}))
l.Info("Here's a differently formatted log message.")
}
```
#### Custom Sink
This example only logs messages with priority `PriErr` and greater.
```go
package main
import (
"github.com/coreos/go-log/log"
"os"
)
func main() {
l := log.NewSimple(
&PriorityFilter{
log.PriErr,
log.WriterSink(os.Stdout, log.BasicFormat, log.BasicFields),
})
l.Info("This will be filtered out")
l.Info("and not printed at all.")
l.Error("This will be printed, though!")
l.Critical("And so will this!")
}
type PriorityFilter struct {
priority log.Priority
target log.Sink
}
func (filter *PriorityFilter) Log(fields log.Fields) {
// lower priority values indicate more important messages
if fields["priority"].(log.Priority) <= filter.priority {
filter.target.Log(fields)
}
}
```
### Fields
The following fields are available for use in all sinks:
```go
"prefix" string // static field available to all sinks
"seq" uint64 // auto-incrementing sequence number
"start_time" time.Time // start time of the log
"time" string // formatted time of log entry
"full_time" time.Time // time of log entry
"rtime" time.Duration // relative time of log entry since started
"pid" int // process id
"executable" string // executable filename
```
In addition, if `verbose=true` is passed to `New()`, the following (somewhat expensive) runtime fields are also available:
```go
"funcname" string // function name where the log function was called
"lineno" int // line number where the log function was called
"pathname" string // full pathname of caller
"filename" string // filename of caller
```
### Logging functions
All these functions can also be called directly to use the default log.
```go
func (*Logger) Log(priority Priority, v ...interface)
func (*Logger) Logf(priority Priority, format string, v ...interface{})
func (*Logger) Emergency(v ...interface)
func (*Logger) Emergencyf(format string, v ...interface{})
func (*Logger) Alert(v ...interface)
func (*Logger) Alertf(format string, v ...interface{})
func (*Logger) Critical(v ...interface)
func (*Logger) Criticalf(format string, v ...interface{})
func (*Logger) Error(v ...interface)
func (*Logger) Errorf(format string, v ...interface{})
func (*Logger) Warning(v ...interface)
func (*Logger) Warningf(format string, v ...interface{})
func (*Logger) Notice(v ...interface)
func (*Logger) Noticef(format string, v ...interface{})
func (*Logger) Info(v ...interface)
func (*Logger) Infof(format string, v ...interface{})
func (*Logger) Debug(v ...interface)
func (*Logger) Debugf(format string, v ...interface{})
```
### Acknowledgements
This package is a mostly-from-scratch rewrite of
[ccding/go-logging](https://github.com/ccding/go-logging) with some features
removed and systemd support added.
|