本文整理匯總了Golang中github.com/heroku/slog.Context類的典型用法代碼示例。如果您正苦於以下問題:Golang Context類的具體用法?Golang Context怎麽用?Golang Context使用的例子?那麽, 這裏精選的類代碼示例或許可以為您提供幫助。
在下文中一共展示了Context類的5個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: Sample
func (g *ChanGroup) Sample(ctx slog.Context) {
ctx.Add("source", g.Name)
for i := 0; i < numSeries; i++ {
// TODO: If we set the ChanGroup.Name to be the hostname, this might need to change.
ctx.Sample(fmt.Sprintf("points.%s.pending", seriesNames[i]), len(g.points[i]))
}
}
示例2: deliver
func (p *RiemannPoster) deliver(event *raidman.Event) {
ctx := slog.Context{}
defer func() { LogWithContext(ctx) }()
start := time.Now()
log.Printf("sending %#v\n", *event)
err := p.riemann.Send(event)
if err != nil {
log.Println(ctx, "delivery error, trying to reconnect:", err)
new_riemann, err := raidman.Dial("tcp", p.riemannAddress)
if err == nil {
log.Println("reconnected!")
p.riemann = new_riemann
} else {
log.Println("reconnection failed:", err)
}
}
ctx.MeasureSince("riemann_poster.time", start)
}
示例3: main
func main() {
ctx := slog.Context{}
ctx.Add("fixture", true)
fmt.Println(ctx)
}
示例4: serveDrain
// "Parse tree" from hell
func serveDrain(w http.ResponseWriter, r *http.Request) {
ctx := slog.Context{}
defer func() { LogWithContext(ctx) }()
w.Header().Set("Content-Length", "0")
if r.Method != "POST" {
w.WriteHeader(http.StatusMethodNotAllowed)
ctx.Count("errors.drain.wrong.method", 1)
return
}
id := r.Header.Get("Logplex-Drain-Token")
if id == "" {
if err := checkAuth(r); err != nil {
w.WriteHeader(http.StatusForbidden)
ctx.Count("errors.auth.failure", 1)
return
}
}
ctx.Count("batch", 1)
parseStart := time.Now()
lp := lpx.NewReader(bufio.NewReader(r.Body))
for lp.Next() {
ctx.Count("lines.total", 1)
header := lp.Header()
// If the syslog App Name Header field containts what looks like a log token,
// let's assume it's an override of the id and we're getting the data from the magic
// channel
if bytes.HasPrefix(header.Name, TokenPrefix) {
id = string(header.Name)
}
// If we still don't have an id, throw an error and try the next line
if id == "" {
ctx.Count("errors.token.missing", 1)
continue
}
chanGroup := hashRing.Get(id)
msg := lp.Bytes()
switch {
case bytes.Equal(header.Name, Heroku), bytes.HasPrefix(header.Name, TokenPrefix):
t, e := time.Parse("2006-01-02T15:04:05.000000+00:00", string(lp.Header().Time))
if e != nil {
log.Printf("Error Parsing Time(%s): %q\n", string(lp.Header().Time), e)
continue
}
timestamp := t.UnixNano() / int64(time.Microsecond)
pid := string(header.Procid)
switch pid {
case "router":
switch {
// router logs with a H error code in them
case bytes.Contains(msg, keyCodeH):
ctx.Count("lines.router.error", 1)
re := routerError{}
err := logfmt.Unmarshal(msg, &re)
if err != nil {
log.Printf("logfmt unmarshal error: %s\n", err)
continue
}
chanGroup.points[EventsRouter] <- []interface{}{timestamp, id, re.Code}
// likely a standard router log
default:
ctx.Count("lines.router", 1)
rm := routerMsg{}
err := logfmt.Unmarshal(msg, &rm)
if err != nil {
log.Printf("logfmt unmarshal error: %s\n", err)
continue
}
chanGroup.points[Router] <- []interface{}{timestamp, id, rm.Status, rm.Service}
}
// Non router logs, so either dynos, runtime, etc
default:
switch {
// Dyno error messages
case bytes.HasPrefix(msg, dynoErrorSentinel):
ctx.Count("lines.dyno.error", 1)
de, err := parseBytesToDynoError(msg)
if err != nil {
log.Printf("Unable to parse dyno error message: %q\n", err)
}
what := string(lp.Header().Procid)
chanGroup.points[EventsDyno] <- []interface{}{
timestamp,
id,
//.........這裏部分代碼省略.........
示例5: LogWithContext
func LogWithContext(ctx slog.Context) {
ctx.Add("app", "lumbermill")
log.Println(ctx)
}