Usage
go build log.go
./log --port="1337"
./log --port="-1" # Prefer local logger
package main | |
import ( | |
"fmt" | |
"net" | |
"os" | |
"time" | |
"flag" | |
) | |
const ( | |
APP = "my_app" | |
format = "Jan 2 15:04:05" | |
INFO = "INFO" | |
ERROR = "ERROR" | |
NOTICE = "NOTICE" | |
) | |
var ( | |
papertrail = flag.String("port", "1337", "Papertrail port to send to, set to -1 to disable Papertrail logging") | |
date = time.Now().Format(format) | |
) | |
func init() { | |
flag.Parse() | |
} | |
func main() { | |
log(INFO, "Hello from papertrail") | |
log(ERROR, "Something bad happened") | |
log(NOTICE, "Important") | |
} | |
func logMsg(typ, msg string) string { | |
return fmt.Sprintf("<22> %s %s: [%s] %s", date, APP, typ, msg) | |
} | |
func log(typ, msg string) { | |
if *papertrail == "-1" { | |
fmt.Fprintln(os.Stdout, logMsg(typ, msg)) | |
return | |
} | |
conn, err := net.Dial("udp", "logs.papertrailapp.com:"+*papertrail) | |
if err != nil { | |
fmt.Fprintf(os.Stderr, "%s %s: [%s] %s\n", date, APP, ERROR, err) | |
return | |
} | |
_, err = conn.Write([]byte(logMsg(typ, msg))) | |
if err != nil { | |
fmt.Fprintf(os.Stderr, "%s %s: [%s] %s\n", date, APP, ERROR, err) | |
conn.Close() | |
return | |
} | |
conn.Close() | |
} |