Comments (8)
The obvious way is to canonize some levels into the interface definition, but I'd like to avoid that...
from kit.
We could define a new interface with canonized levels, with constructors that can wrap a logger...
from kit.
How would log.With
compose with the new interface you propose?
from kit.
Not well :) Could probably dream up a special-case solution, like
type Foo interface {
Info(keyvals ...interface{})
Warn(keyvals ...interface{})
Error(keyvals ...interface{})
With(keyvals ...interface{}) Foo
}
But that feels awkward, opposite of the existing API.
from kit.
In general I'm struggling to embrace and extend log.With
semantics...
from kit.
@ChrisHines, what do you think about the approach described in this README?
from kit.
@peterbourgon What do you think of this?
func With(keyvals ...interface{}) Context {
c := Context{}
return c.With(keyvals...)
}
type Context []interface{}
func (c Context) With(keyvals ...interface{}) Context {
n := len(c)
return append(c[:n:n], keyvals...)
}
func (c Context) LogTo(logger Logger) error {
ctx := c
if containsValuer(ctx) {
ctx = append(Context{}, ctx...)
bindValues(ctx)
}
return logger.Log(ctx...)
}
The above code would get used like this:
ctx := log.With("a", 123)
...
ctx = ctx.With("b", "c")
...
ctx.With("msg", "message").LogTo(logger)
from kit.
On first read I resisted the idea of manipulating a first-order Context object and logging it "to" a destination, but after rolling it around a little bit, it feels like it could reasonable. Any reason not to s/LogTo/Log/? Thinking out loud a little bit: we're flying pretty close to an encoder or writer API, I wonder if it doesn't make sense to make that more explicit, with something like
type Logger interface {
Log(Context) error
}
func (c Context) Log(dst Logger) error {
return dst.Log(c)
}
...which raises the question of where best to put the valuer stuff. It feels strange to have it only occur when you context.Log(logger), and get ignored if you logger.Log(context). Maybe your version, having the logger take a keyvals, makes that more explicit.
from kit.
Related Issues (20)
- Kafka transport implementation HOT 4
- Consul Implementation of Instancer spams Consul and pushes consul agents to 100% CPU HOT 3
- prometheus/client_golang vulneravility issue
- License violation in metrics/teststat/populate.go HOT 3
- hystrix pkg don't support fallback func HOT 3
- Stackoverflow CC-SA License Violation HOT 2
- Support for overriding ErrorHandler in httputil.ReverseProxy HOT 1
- nats-io/jwt/v2 & nats-io/nats-server/v2 vulnerability issues CVE-2021-3127 & CVE-2022-24450 HOT 1
- [NATS transport] Support for headers in EncodeJSONResponse HOT 6
- Upgrade to prometheus/client_golang 1.12.2 HOT 4
- Security vuln CVE-2019-19794 with transitive dependency github.com/miekg/[email protected] HOT 1
- Fix security vulnerability CVE-2022-41717 exposed by Go gRPC dependency HOT 1
- Nats Jetstream transport HOT 1
- Could you create a new release tag with the upgraded package HOT 5
- Vulnerability of dependency "golang.org/x/net, golang.org/x/text, github.com/nats-io/nats-server/v2"
- Security vuln CVE-2022-34038 affecting go etcd client HOT 1
- otelkit was removed from opentelemetry-go-contrib HOT 1
- Add Error Handling for Canceled Contexts during request lifecycle HOT 2
- New security vulnerabilities found in multiple direct and indirect third-party dependencies
- UDP as a transport HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from kit.