Skip to content

Commit 1ac23ce

Browse files
authored
Merge pull request #735 from lightpanda-io/improved_logging
Improved logging
2 parents 47da5e0 + a000dfe commit 1ac23ce

File tree

23 files changed

+476
-227
lines changed

23 files changed

+476
-227
lines changed

build.zig

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -44,21 +44,6 @@ pub fn build(b: *std.Build) !void {
4444
b.option([]const u8, "git_commit", "Current git commit") orelse "dev",
4545
);
4646

47-
{
48-
const log = @import("src/log.zig");
49-
opts.addOption(
50-
log.Level,
51-
"log_level",
52-
b.option(log.Level, "log_level", "The log level") orelse .info,
53-
);
54-
}
55-
56-
opts.addOption(
57-
bool,
58-
"log_unknown_properties",
59-
b.option(bool, "log_unknown_properties", "Log access to unknown properties") orelse false,
60-
);
61-
6247
const target = b.standardTargetOptions(.{});
6348
const optimize = b.standardOptimizeOption(.{});
6449

src/browser/console/console.zig

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,9 @@
1919
const std = @import("std");
2020
const builtin = @import("builtin");
2121

22-
const JsObject = @import("../env.zig").Env.JsObject;
22+
const Allocator = std.mem.Allocator;
2323
const Page = @import("../page.zig").Page;
24+
const JsObject = @import("../env.zig").Env.JsObject;
2425

2526
const log = if (builtin.is_test) &test_capture else @import("../../log.zig");
2627

@@ -29,6 +30,13 @@ pub const Console = struct {
2930
timers: std.StringHashMapUnmanaged(u32) = .{},
3031
counts: std.StringHashMapUnmanaged(u32) = .{},
3132

33+
pub fn _lp(_: *const Console, values: []JsObject, page: *Page) !void {
34+
if (values.len == 0) {
35+
return;
36+
}
37+
log.fatal(.console, "lightpanda", .{ .args = try serializeValues(values, page) });
38+
}
39+
3240
pub fn _log(_: *const Console, values: []JsObject, page: *Page) !void {
3341
if (values.len == 0) {
3442
return;
@@ -134,12 +142,19 @@ pub const Console = struct {
134142
}
135143

136144
fn serializeValues(values: []JsObject, page: *Page) ![]const u8 {
145+
if (values.len == 0) {
146+
return "";
147+
}
148+
137149
const arena = page.call_arena;
150+
const separator = log.separator();
138151
var arr: std.ArrayListUnmanaged(u8) = .{};
139-
try arr.appendSlice(arena, try values[0].toString());
140-
for (values[1..]) |value| {
141-
try arr.append(arena, ' ');
142-
try arr.appendSlice(arena, try value.toString());
152+
153+
for (values, 1..) |value, i| {
154+
try arr.appendSlice(arena, separator);
155+
try arr.writer(arena).print("{d}: ", .{i});
156+
const serialized = if (builtin.mode == .Debug) value.toDetailString() else value.toString();
157+
try arr.appendSlice(arena, try serialized);
143158
}
144159
return arr.items;
145160
}
@@ -165,8 +180,8 @@ test "Browser.Console" {
165180
}, .{});
166181

167182
const captured = test_capture.captured.items;
168-
try testing.expectEqual("[info] args=a", captured[0]);
169-
try testing.expectEqual("[warn] args=hello world 23 true [object Object]", captured[1]);
183+
try testing.expectEqual("[info] args= 1: a", captured[0]);
184+
try testing.expectEqual("[warn] args= 1: hello world 2: 23 3: true 4: #<Object>", captured[1]);
170185
}
171186

172187
{
@@ -207,13 +222,17 @@ test "Browser.Console" {
207222

208223
const captured = test_capture.captured.items;
209224
try testing.expectEqual("[assertion failed] values=", captured[0]);
210-
try testing.expectEqual("[assertion failed] values=x true", captured[1]);
211-
try testing.expectEqual("[assertion failed] values=x", captured[2]);
225+
try testing.expectEqual("[assertion failed] values= 1: x 2: true", captured[1]);
226+
try testing.expectEqual("[assertion failed] values= 1: x", captured[2]);
212227
}
213228
}
214229
const TestCapture = struct {
215230
captured: std.ArrayListUnmanaged([]const u8) = .{},
216231

232+
fn separator(_: *const TestCapture) []const u8 {
233+
return " ";
234+
}
235+
217236
fn reset(self: *TestCapture) void {
218237
self.captured = .{};
219238
}
@@ -254,6 +273,15 @@ const TestCapture = struct {
254273
self.capture(scope, msg, args);
255274
}
256275

276+
fn fatal(
277+
self: *TestCapture,
278+
comptime scope: @Type(.enum_literal),
279+
comptime msg: []const u8,
280+
args: anytype,
281+
) void {
282+
self.capture(scope, msg, args);
283+
}
284+
257285
fn capture(
258286
self: *TestCapture,
259287
comptime scope: @Type(.enum_literal),
@@ -278,7 +306,7 @@ const TestCapture = struct {
278306
inline for (@typeInfo(@TypeOf(args)).@"struct".fields) |f| {
279307
try buf.appendSlice(allocator, f.name);
280308
try buf.append(allocator, '=');
281-
try @import("../../log.zig").writeValue(false, @field(args, f.name), buf.writer(allocator));
309+
try @import("../../log.zig").writeValue(.pretty, @field(args, f.name), buf.writer(allocator));
282310
try buf.append(allocator, ' ');
283311
}
284312
self.captured.append(testing.arena_allocator, std.mem.trimRight(u8, buf.items, " ")) catch unreachable;

src/browser/dom/element.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ pub const Element = struct {
147147
while (true) {
148148
if (try select.match(current)) {
149149
if (!current.isElement()) {
150-
log.err(.element, "closest invalid type", .{ .type = try current.tag() });
150+
log.err(.browser, "closest invalid type", .{ .type = try current.tag() });
151151
return null;
152152
}
153153
return parser.nodeToElement(current.node);

src/browser/dom/intersection_observer.zig

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,11 @@ pub const IntersectionObserver = struct {
8686

8787
var result: Env.Function.Result = undefined;
8888
self.callback.tryCall(void, .{self.observed_entries.items}, &result) catch {
89-
log.debug(.int_obs, "callback error", .{ .err = result.exception, .stack = result.stack });
89+
log.debug(.user_script, "callback error", .{
90+
.err = result.exception,
91+
.stack = result.stack,
92+
.source = "intersection observer",
93+
});
9094
};
9195
}
9296

src/browser/dom/mutation_observer.zig

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,11 @@ pub const MutationObserver = struct {
114114
const records = [_]MutationRecord{r.*};
115115
var result: Env.Function.Result = undefined;
116116
self.cbk.tryCall(void, .{records}, &result) catch {
117-
log.debug(.mut_obs, "callback error", .{ .err = result.exception, .stack = result.stack });
117+
log.debug(.user_script, "callback error", .{
118+
.err = result.exception,
119+
.stack = result.stack,
120+
.source = "mutation observer",
121+
});
118122
};
119123
}
120124
}
@@ -242,7 +246,7 @@ const Observer = struct {
242246
fn handle(en: *parser.EventNode, event: *parser.Event) void {
243247
const self: *Observer = @fieldParentPtr("event_node", en);
244248
self._handle(event) catch |err| {
245-
log.err(.mut_obs, "handle error", .{ .err = err });
249+
log.err(.web_api, "handle error", .{ .err = err, .source = "mutation observer" });
246250
};
247251
}
248252

src/browser/dom/node.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ pub const Node = struct {
269269
// - An Element that is not attached to a document or a shadow tree will return the root of the DOM tree it belongs to
270270
pub fn _getRootNode(self: *parser.Node, options: ?struct { composed: bool = false }) !Union {
271271
if (options) |options_| if (options_.composed) {
272-
log.warn(.node, "not implemented", .{ .feature = "getRootNode composed" });
272+
log.warn(.web_api, "not implemented", .{ .feature = "getRootNode composed" });
273273
};
274274
return try Node.toInterface(try parser.nodeGetRootNode(self));
275275
}

src/browser/dom/nodelist.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ pub const NodeList = struct {
145145
const ii: u32 = @intCast(i);
146146
var result: Function.Result = undefined;
147147
cbk.tryCall(void, .{ n, ii, self }, &result) catch {
148-
log.debug(.node_list, "forEach callback", .{ .err = result.exception, .stack = result.stack });
148+
log.debug(.user_script, "forEach callback", .{ .err = result.exception, .stack = result.stack });
149149
};
150150
}
151151
}

src/browser/dom/token_list.zig

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,11 @@ pub const DOMTokenList = struct {
142142
while (try entries._next()) |entry| {
143143
var result: Function.Result = undefined;
144144
cbk.tryCallWithThis(void, this_arg, .{ entry.@"1", entry.@"0", self }, &result) catch {
145-
log.debug(.token_list, "foreach callback error", .{ .err = result.exception, .stack = result.stack });
145+
log.debug(.user_script, "callback error", .{
146+
.err = result.exception,
147+
.stack = result.stack,
148+
.soure = "tokenList foreach",
149+
});
146150
};
147151
}
148152
}

src/browser/events/event.zig

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -237,14 +237,18 @@ pub const EventHandler = struct {
237237

238238
fn handle(node: *parser.EventNode, event: *parser.Event) void {
239239
const ievent = Event.toInterface(event) catch |err| {
240-
log.err(.event, "toInterface error", .{ .err = err });
240+
log.err(.app, "toInterface error", .{ .err = err });
241241
return;
242242
};
243243

244244
const self: *EventHandler = @fieldParentPtr("node", node);
245245
var result: Function.Result = undefined;
246246
self.callback.tryCall(void, .{ievent}, &result) catch {
247-
log.debug(.event, "handle callback error", .{ .err = result.exception, .stack = result.stack });
247+
log.debug(.user_script, "callback error", .{
248+
.err = result.exception,
249+
.stack = result.stack,
250+
.source = "event handler",
251+
});
248252
};
249253

250254
if (self.once) {

src/browser/html/document.zig

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
const std = @import("std");
2020

21+
const log = @import("../../log.zig");
2122
const parser = @import("../netsurf.zig");
2223
const Page = @import("../page.zig").Page;
2324

@@ -276,6 +277,10 @@ pub const HTMLDocument = struct {
276277
const evt = try parser.eventCreate();
277278
defer parser.eventDestroy(evt);
278279

280+
log.debug(.script_event, "dispatch event", .{
281+
.type = "DOMContentLoaded",
282+
.source = "document",
283+
});
279284
try parser.eventInit(evt, "DOMContentLoaded", .{ .bubbles = true, .cancelable = true });
280285
_ = try parser.eventTargetDispatchEvent(parser.toEventTarget(parser.DocumentHTML, html_doc), evt);
281286
}

0 commit comments

Comments
 (0)