Skip to content

Commit c6f85ed

Browse files
feat: add logger override option, use slog.Default (#497)
--------- Co-authored-by: Can Stand <[email protected]>
1 parent b6313db commit c6f85ed

File tree

9 files changed

+70
-21
lines changed

9 files changed

+70
-21
lines changed

binding_call.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ func (b *bindingCallImpl) Call(f BindingCallFunction) {
3434
if _, err := b.channel.Send("reject", map[string]interface{}{
3535
"error": serializeError(r.(error)),
3636
}); err != nil {
37-
logger.Printf("could not reject BindingCall: %v\n", err)
37+
logger.Error("could not reject BindingCall", "error", err)
3838
}
3939
}
4040
}()
@@ -60,7 +60,7 @@ func (b *bindingCallImpl) Call(f BindingCallFunction) {
6060
"result": serializeArgument(result),
6161
})
6262
if err != nil {
63-
logger.Printf("could not resolve BindingCall: %v\n", err)
63+
logger.Error("could not resolve BindingCall", "error", err)
6464
}
6565
}
6666

browser_context.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -589,7 +589,7 @@ func (b *browserContextImpl) onRoute(route *routeImpl) {
589589
return nil, err
590590
}, true)
591591
if err != nil {
592-
logger.Printf("could not update interception patterns: %v\n", err)
592+
logger.Error("could not update interception patterns", "error", err)
593593
}
594594
}
595595
}
@@ -742,7 +742,7 @@ func (b *browserContextImpl) onWebSocketRoute(wr WebSocketRoute) {
742742
b.Unlock()
743743
_, err := wr.ConnectToServer()
744744
if err != nil {
745-
logger.Println(err)
745+
logger.Error("could not connect to WebSocket server", "error", err)
746746
}
747747
return
748748
}

channel.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ func (c *channel) innerSendNoReply(method string, isInternal bool, options ...in
7777
}, isInternal)
7878
if err != nil {
7979
// ignore error actively, log only for debug
80-
logger.Printf("SendNoReply failed: %v\n", err)
80+
logger.Error("SendNoReply failed", "error", err)
8181
}
8282
}
8383

frame.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ func (f *frameImpl) ExpectNavigation(cb func() error, options ...FrameExpectNavi
210210
err, ok := ev["error"]
211211
if ok {
212212
// Any failed navigation results in a rejection.
213-
logger.Printf("navigated to %s error: %v", ev["url"].(string), err)
213+
logger.Error("navigation error", "url", ev["url"].(string), "error", err)
214214
return true
215215
}
216216
return matcher == nil || matcher.Matches(ev["url"].(string))

har_router.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ func (r *harRouter) addContextRoute(context BrowserContext) error {
1919
err := context.Route(r.urlOrPredicate, func(route Route) {
2020
err := r.handle(route)
2121
if err != nil {
22-
logger.Println(err)
22+
logger.Error("Error handling context route", "error", err)
2323
}
2424
})
2525
if err != nil {
@@ -35,7 +35,7 @@ func (r *harRouter) addPageRoute(page Page) error {
3535
err := page.Route(r.urlOrPredicate, func(route Route) {
3636
err := r.handle(route)
3737
if err != nil {
38-
logger.Println(err)
38+
logger.Error("Error handling page route", "error", err)
3939
}
4040
})
4141
if err != nil {
@@ -84,7 +84,7 @@ func (r *harRouter) handle(route Route) error {
8484
Headers: deserializeNameAndValueToMap(response.Headers),
8585
})
8686
case "error":
87-
logger.Printf("har action error: %v\n", *response.Message)
87+
logger.Error("har action error", "error", *response.Message)
8888
fallthrough
8989
case "noentry":
9090
}

page.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -934,7 +934,7 @@ func (p *pageImpl) onRoute(route *routeImpl) {
934934
return nil, err
935935
}, true)
936936
if err != nil {
937-
logger.Printf("could not update interception patterns: %v\n", err)
937+
logger.Error("could not update interception patterns", "error", err)
938938
}
939939
}
940940
}

run.go

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"fmt"
88
"io"
99
"log"
10+
"log/slog"
1011
"net/http"
1112
"os"
1213
"os/exec"
@@ -15,12 +16,10 @@ import (
1516
"strings"
1617
)
1718

18-
const (
19-
playwrightCliVersion = "1.49.0"
20-
)
19+
const playwrightCliVersion = "1.49.0"
2120

2221
var (
23-
logger = log.Default()
22+
logger = slog.Default()
2423
playwrightCDNMirrors = []string{
2524
"https://playwright.azureedge.net",
2625
"https://playwright-akamai.azureedge.net",
@@ -137,7 +136,7 @@ func (d *PlaywrightDriver) DownloadDriver() error {
137136
return nil
138137
}
139138

140-
d.log(fmt.Sprintf("Downloading driver to %s", d.options.DriverDirectory))
139+
d.log("Downloading driver", "path", d.options.DriverDirectory)
141140

142141
body, err := downloadDriver(d.getDriverURLs())
143142
if err != nil {
@@ -186,9 +185,9 @@ func (d *PlaywrightDriver) DownloadDriver() error {
186185
return nil
187186
}
188187

189-
func (d *PlaywrightDriver) log(s string) {
188+
func (d *PlaywrightDriver) log(msg string, args ...any) {
190189
if d.options.Verbose {
191-
logger.Println(s)
190+
logger.Info(msg, args...)
192191
}
193192
}
194193

@@ -236,6 +235,7 @@ type RunOptions struct {
236235
Verbose bool // default true
237236
Stdout io.Writer
238237
Stderr io.Writer
238+
Logger *slog.Logger
239239
}
240240

241241
// Install does download the driver and the browsers.
@@ -295,8 +295,11 @@ func transformRunOptions(options ...*RunOptions) (*RunOptions, error) {
295295
}
296296
if option.Stderr == nil {
297297
option.Stderr = os.Stderr
298-
} else {
299-
logger.SetOutput(option.Stderr)
298+
} else if option.Logger == nil {
299+
log.SetOutput(option.Stderr)
300+
}
301+
if option.Logger != nil {
302+
logger = option.Logger
300303
}
301304
return option, nil
302305
}

run_test.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,64 @@
11
package playwright
22

33
import (
4+
"bufio"
45
"fmt"
6+
"io"
57
"net/http"
68
"net/http/httptest"
79
"os"
810
"strings"
11+
"sync"
912
"testing"
1013

1114
"github.com/mitchellh/go-ps"
1215
"github.com/stretchr/testify/assert"
1316
"github.com/stretchr/testify/require"
1417
)
1518

19+
func TestRunOptionsRedirectStderr(t *testing.T) {
20+
r, w := io.Pipe()
21+
var output string
22+
wg := &sync.WaitGroup{}
23+
wg.Add(1)
24+
go func() {
25+
defer wg.Done()
26+
buf := bufio.NewReader(r)
27+
for {
28+
line, _, err := buf.ReadLine()
29+
if err == io.EOF {
30+
break
31+
}
32+
output += string(line)
33+
}
34+
_ = r.Close()
35+
}()
36+
37+
driverPath := t.TempDir()
38+
options := &RunOptions{
39+
Stderr: w,
40+
DriverDirectory: driverPath,
41+
Browsers: []string{},
42+
Verbose: true,
43+
}
44+
45+
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
46+
w.WriteHeader(404)
47+
}))
48+
defer ts.Close()
49+
50+
t.Setenv("PLAYWRIGHT_DOWNLOAD_HOST", ts.URL)
51+
driver, err := NewDriver(options)
52+
require.NoError(t, err)
53+
err = driver.Install()
54+
require.Error(t, err)
55+
require.NoError(t, w.Close())
56+
wg.Wait()
57+
58+
assert.Contains(t, output, "Downloading driver")
59+
require.Contains(t, output, fmt.Sprintf("path=%s", driverPath))
60+
}
61+
1662
func TestDriverInstall(t *testing.T) {
1763
driverPath := t.TempDir()
1864
driver, err := NewDriver(&RunOptions{

websocket.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ func (ws *webSocketImpl) onFrameSent(opcode float64, data string) {
5050
if opcode == 2 {
5151
payload, err := base64.StdEncoding.DecodeString(data)
5252
if err != nil {
53-
logger.Printf("could not decode WebSocket.onFrameSent payload: %v\n", err)
53+
logger.Error("could not decode WebSocket.onFrameSent payload", "error", err)
5454
return
5555
}
5656
ws.Emit("framesent", payload)
@@ -63,7 +63,7 @@ func (ws *webSocketImpl) onFrameReceived(opcode float64, data string) {
6363
if opcode == 2 {
6464
payload, err := base64.StdEncoding.DecodeString(data)
6565
if err != nil {
66-
logger.Printf("could not decode WebSocket.onFrameReceived payload: %v\n", err)
66+
logger.Error("could not decode WebSocket.onFrameReceived payload", "error", err)
6767
return
6868
}
6969
ws.Emit("framereceived", payload)

0 commit comments

Comments
 (0)