Skip to content
This repository was archived by the owner on Aug 17, 2020. It is now read-only.

Commit b1a706b

Browse files
authored
Standard logger with context support (#131)
* standard logger instrumentation with context * fixes * remove unsafe * restore go.mod * changes * go mod tidy
1 parent 11d160a commit b1a706b

File tree

3 files changed

+69
-48
lines changed

3 files changed

+69
-48
lines changed

go.mod

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ require (
88
github.com/go-errors/errors v1.0.1
99
github.com/gogo/protobuf v1.3.1
1010
github.com/google/uuid v1.1.1
11-
github.com/kr/pretty v0.1.0 // indirect
1211
github.com/mitchellh/go-homedir v1.1.0
1312
github.com/opentracing/basictracer-go v1.0.0
1413
github.com/opentracing/opentracing-go v1.1.0
@@ -21,7 +20,6 @@ require (
2120
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527 // indirect
2221
google.golang.org/appengine v1.6.5 // indirect
2322
google.golang.org/grpc v1.27.1
24-
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect
2523
gopkg.in/src-d/go-git.v4 v4.13.1
2624
gopkg.in/tomb.v2 v2.0.0-20161208151619-d5d1b5820637
2725
)

go.sum

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
22
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
3+
github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs=
34
github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs=
5+
github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA=
46
github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c=
7+
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
58
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
69
github.com/beevik/ntp v0.2.0 h1:sGsd+kAXzT0bfVfzJfce04g+dSRfrs+tbQW8lweuYgw=
710
github.com/beevik/ntp v0.2.0/go.mod h1:hIHWr+l3+/clUnF44zdK+CWW7fO8dR5cIylAQ76NRpg=
@@ -13,10 +16,11 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
1316
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
1417
github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg=
1518
github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o=
16-
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
1719
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
1820
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
21+
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ=
1922
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc=
23+
github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0=
2024
github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0=
2125
github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w=
2226
github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=
@@ -31,6 +35,7 @@ github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y
3135
github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
3236
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
3337
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
38+
github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY=
3439
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
3540
github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
3641
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
@@ -54,6 +59,7 @@ github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKw
5459
github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU=
5560
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
5661
github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo=
62+
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
5763
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
5864
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
5965
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
@@ -72,8 +78,6 @@ github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJy
7278
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
7379
github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
7480
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
75-
github.com/undefinedlabs/go-mpatch v0.0.0-20200122152126-8db832768c71 h1:wVaGx1BqVqs6hb36eUX6O/z1peLxfRMoiw91mwjjiX8=
76-
github.com/undefinedlabs/go-mpatch v0.0.0-20200122152126-8db832768c71/go.mod h1:TyJZDQ/5AgyN7FSLiBJ8RO9u2c6wbtRvK827b6AVqY4=
7781
github.com/undefinedlabs/go-mpatch v0.0.0-20200122175732-0044123dbb98 h1:Z/megzdoMbuZ0H/oLmfTw92PAEfyTi1DkvAr8AUzFgw=
7882
github.com/undefinedlabs/go-mpatch v0.0.0-20200122175732-0044123dbb98/go.mod h1:TyJZDQ/5AgyN7FSLiBJ8RO9u2c6wbtRvK827b6AVqY4=
7983
github.com/vmihailenco/msgpack v4.0.4+incompatible h1:dSLoQfGFAo3F6OoNhwUmLwVgaUXK79GlxNBwueZn0xI=
@@ -98,10 +102,6 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn
98102
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
99103
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
100104
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
101-
golang.org/x/net v0.0.0-20191124235446-72fef5d5e266 h1:QuOiA7GCO0OSDzlNlFyOWOywDsjuzW8M2yvBfCqw+cY=
102-
golang.org/x/net v0.0.0-20191124235446-72fef5d5e266/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
103-
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa h1:F+8P+gmewFQYRk6JoLQLwjBCTu3mcIURZfNkVweuRKA=
104-
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
105105
golang.org/x/net v0.0.0-20200301022130-244492dfa37a h1:GuSPYbZzB5/dcLNCwLQLsg3obCJtX9IJhpXkvY7kzk0=
106106
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
107107
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
@@ -113,10 +113,6 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h
113113
golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
114114
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
115115
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
116-
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e h1:N7DeIrjYszNmSW409R3frPPwglRwMkXSBzwVbkOjLLA=
117-
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
118-
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82 h1:ywK/j/KkyTHcdyYSZNXGjMwgmDSfjglYZ3vStQ/gSCU=
119-
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
120116
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527 h1:uYVVQ9WP/Ds2ROhcaGPeIdVq0RIXVLwsHlnvJ+cT1So=
121117
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
122118
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -139,12 +135,6 @@ google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55 h1:gSJIx1SDwno+2El
139135
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
140136
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
141137
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
142-
google.golang.org/grpc v1.25.1 h1:wdKvqQk7IttEw92GoRyKG2IDrUIpgpj6H6m81yfeMW0=
143-
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
144-
google.golang.org/grpc v1.26.0 h1:2dTRdpdFEEhJYQD8EMLB61nnrzSCTbG38PhqdhvOltg=
145-
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
146-
google.golang.org/grpc v1.27.0 h1:rRYRFMVgRv6E0D70Skyfsr28tDXIuuPZyWGMPdMcnXg=
147-
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
148138
google.golang.org/grpc v1.27.1 h1:zvIju4sqAGvwKspUQOhwnpcqSbzi7/H6QomNNjTL4sk=
149139
google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
150140
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -153,6 +143,7 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogR
153143
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
154144
gopkg.in/src-d/go-billy.v4 v4.3.2 h1:0SQA1pRztfTFx2miS8sA97XvooFeNOmvUenF4o0EcVg=
155145
gopkg.in/src-d/go-billy.v4 v4.3.2/go.mod h1:nDjArDMp+XMs1aFAESLRjfGSgfvoYN0hDfzEk0GjC98=
146+
gopkg.in/src-d/go-git-fixtures.v3 v3.5.0 h1:ivZFOIltbce2Mo8IjzUHAFoq/IylO9WHhNOAJK+LsJg=
156147
gopkg.in/src-d/go-git-fixtures.v3 v3.5.0/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g=
157148
gopkg.in/src-d/go-git.v4 v4.13.1 h1:SRtFyV8Kxc0UP7aCHcijOMQGPxHSmMOPrzulQWolkYE=
158149
gopkg.in/src-d/go-git.v4 v4.13.1/go.mod h1:nx5NYcxdKxq5fpltdHnPa2Exj4Sx0EclMWZQbYDu2z8=
@@ -162,6 +153,7 @@ gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME=
162153
gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
163154
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
164155
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
156+
gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
165157
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
166158
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
167159
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=

instrumentation/logging/logger.go

Lines changed: 60 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package logging
22

33
import (
4+
"context"
45
"fmt"
56
"io"
67
stdlog "log"
@@ -25,6 +26,7 @@ type (
2526
logRecordsMutex sync.RWMutex
2627
logRecords []opentracing.LogRecord
2728
regex *regexp.Regexp
29+
ctx context.Context
2830
}
2931
logItem struct {
3032
time time.Time
@@ -33,21 +35,21 @@ type (
3335
message string
3436
}
3537
loggerPatchInfo struct {
36-
current io.Writer
38+
current *otWriter
3739
previous io.Writer
3840
}
3941
)
4042

4143
var (
4244
patchedLoggersMutex sync.Mutex
43-
patchedLoggers = map[*stdlog.Logger]loggerPatchInfo{}
45+
patchedLoggers = map[io.Writer]loggerPatchInfo{}
4446
stdLoggerWriter io.Writer
4547
)
4648

4749
// Patch the standard logger
4850
func PatchStandardLogger() {
4951
stdLoggerWriter := getStdLoggerWriter()
50-
otWriter := newInstrumentedWriter(stdlog.Prefix(), stdlog.Flags())
52+
otWriter := &otWriter{regex: regexp.MustCompile(fmt.Sprintf(logRegexTemplate, stdlog.Prefix()))}
5153
stdlog.SetOutput(io.MultiWriter(stdLoggerWriter, otWriter))
5254
recorders = append(recorders, otWriter)
5355
}
@@ -59,36 +61,19 @@ func UnpatchStandardLogger() {
5961

6062
// Patch a logger
6163
func PatchLogger(logger *stdlog.Logger) {
62-
patchedLoggersMutex.Lock()
63-
defer patchedLoggersMutex.Unlock()
64-
if _, ok := patchedLoggers[logger]; ok {
65-
return
66-
}
67-
currentWriter := getLoggerWriter(logger)
68-
otWriter := newInstrumentedWriter(logger.Prefix(), logger.Flags())
69-
logger.SetOutput(io.MultiWriter(currentWriter, otWriter))
70-
recorders = append(recorders, otWriter)
71-
patchedLoggers[logger] = loggerPatchInfo{
72-
current: otWriter,
73-
previous: currentWriter,
74-
}
64+
patchLogger(logger, nil)
7565
}
7666

7767
// Unpatch a logger
7868
func UnpatchLogger(logger *stdlog.Logger) {
79-
patchedLoggersMutex.Lock()
80-
defer patchedLoggersMutex.Unlock()
81-
if logInfo, ok := patchedLoggers[logger]; ok {
82-
logger.SetOutput(logInfo.previous)
83-
delete(patchedLoggers, logger)
84-
}
69+
unpatchLogger(logger)
8570
}
8671

87-
// Create a new instrumented writer for loggers
88-
func newInstrumentedWriter(prefix string, flag int) *otWriter {
89-
return &otWriter{
90-
regex: regexp.MustCompile(fmt.Sprintf(logRegexTemplate, prefix)),
91-
}
72+
// Create a new logger with a context
73+
func WithContext(logger *stdlog.Logger, ctx context.Context) *stdlog.Logger {
74+
rLogger := stdlog.New(getLoggerWriter(logger), logger.Prefix(), logger.Flags())
75+
patchLogger(rLogger, ctx)
76+
return rLogger
9277
}
9378

9479
// Write data to the channel and the base writer
@@ -112,6 +97,42 @@ func (w *otWriter) GetRecords() []opentracing.LogRecord {
11297
return w.logRecords
11398
}
11499

100+
// Patch logger with optional context
101+
func patchLogger(logger *stdlog.Logger, ctx context.Context) {
102+
unpatchLogger(logger)
103+
104+
patchedLoggersMutex.Lock()
105+
defer patchedLoggersMutex.Unlock()
106+
107+
otWriter := &otWriter{
108+
regex: regexp.MustCompile(fmt.Sprintf(logRegexTemplate, logger.Prefix())),
109+
ctx: ctx,
110+
}
111+
112+
currentWriter := getLoggerWriter(logger)
113+
newWriter := io.MultiWriter(currentWriter, otWriter)
114+
patchedLoggers[newWriter] = loggerPatchInfo{
115+
current: otWriter,
116+
previous: currentWriter,
117+
}
118+
119+
recorders = append(recorders, otWriter)
120+
logger.SetOutput(newWriter)
121+
}
122+
123+
// Unpatch logger
124+
func unpatchLogger(logger *stdlog.Logger) {
125+
patchedLoggersMutex.Lock()
126+
defer patchedLoggersMutex.Unlock()
127+
128+
currentWriter := getLoggerWriter(logger)
129+
130+
if logInfo, ok := patchedLoggers[currentWriter]; ok {
131+
logger.SetOutput(logInfo.previous)
132+
delete(patchedLoggers, currentWriter)
133+
}
134+
}
135+
115136
// Process bytes and create new log items struct to store
116137
func (w *otWriter) process(p []byte) {
117138
if len(p) == 0 {
@@ -159,8 +180,6 @@ func (w *otWriter) process(p []byte) {
159180

160181
// Stores a new log record from the logItem
161182
func (w *otWriter) storeLogRecord(item *logItem) {
162-
w.logRecordsMutex.Lock()
163-
defer w.logRecordsMutex.Unlock()
164183
fields := []log.Field{
165184
log.String(tags.EventType, tags.LogEvent),
166185
log.String(tags.LogEventLevel, tags.LogLevel_VERBOSE),
@@ -171,6 +190,18 @@ func (w *otWriter) storeLogRecord(item *logItem) {
171190
item.file = filepath.Clean(item.file)
172191
fields = append(fields, log.String(tags.EventSource, fmt.Sprintf("%s:%s", item.file, item.lineNumber)))
173192
}
193+
194+
// If context is found, we try to find the a span from the context and write the logs
195+
if w.ctx != nil {
196+
if span := opentracing.SpanFromContext(w.ctx); span != nil {
197+
span.LogFields(fields...)
198+
return
199+
}
200+
}
201+
202+
// If no context, we store the log records for future extraction
203+
w.logRecordsMutex.Lock()
204+
defer w.logRecordsMutex.Unlock()
174205
w.logRecords = append(w.logRecords, opentracing.LogRecord{
175206
Timestamp: item.time,
176207
Fields: fields,

0 commit comments

Comments
 (0)