mod: rem zlog dependency; stream line logging structure; do not write ansi control characters when logging to file
Some checks failed
Zig Project Action / Lint, Spell-check and test zig project (push) Failing after 1m21s
Some checks failed
Zig Project Action / Lint, Spell-check and test zig project (push) Failing after 1m21s
This commit is contained in:
87
README.md
87
README.md
@@ -5,6 +5,26 @@ Standard Library log wrapper. `zlog` provides adjusted `std.log` output and a pr
|
||||
> [!caution]
|
||||
> Only builds using the zig master version are tested to work.
|
||||
|
||||
## Install
|
||||
|
||||
Add or update this library as a dependency in your zig project run the following command:
|
||||
|
||||
```sh
|
||||
zig fetch --save git+https://gitea.yves-biener.de/yves-biener/zlog
|
||||
```
|
||||
|
||||
Afterwards add the library as a dependendy to any module in your *build.zig*:
|
||||
|
||||
```zig
|
||||
const ztime_dependency = b.dependency("ztime", .{
|
||||
.target = target,
|
||||
.optimize = optimize,
|
||||
.timestamp = true, // default (only required if non-default value shall be used)
|
||||
.stderr = true, // default (only required if non-default value shall be used)
|
||||
.file = "", // default (only required if non-default value shall be used)
|
||||
});
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
The following snippet shows an example usage of `zlog` to change the default log format and add pretty printing to the user defined types:
|
||||
@@ -58,6 +78,8 @@ const Struct = struct {
|
||||
};
|
||||
|
||||
pub fn main() void {
|
||||
// without explict scope (i.e. `.default` scope)
|
||||
std.log.info("Without explicit scope or `.default` scope", .{});
|
||||
// initialize zlog with the scope of `main`
|
||||
const log = std.log.scoped(.main);
|
||||
// NOTE the scope of `default` will result in no scoping being printed in
|
||||
@@ -75,7 +97,7 @@ pub fn main() void {
|
||||
const void_tagged_union: TaggedUnion = .nothing;
|
||||
const uniun: Union = .{ .boolean = true };
|
||||
|
||||
// NOTE: Depending on the optimization target some of these log messages
|
||||
// NOTE Depending on the optimization target some of these log messages
|
||||
// will not show, which is inline with the behavior of `std.log`.
|
||||
log.debug("Debug message {any}", .{int_var});
|
||||
log.info("Info message {any}", .{array_var});
|
||||
@@ -87,6 +109,7 @@ pub fn main() void {
|
||||
log.err("Error message {any}", .{tagged_union});
|
||||
}
|
||||
|
||||
// apply *zlog* logging options to `std` logger
|
||||
pub const std_options = zlog.std_options;
|
||||
|
||||
const std = @import("std");
|
||||
@@ -96,60 +119,30 @@ const zlog = @import("zlog");
|
||||
This will result in the following output:
|
||||
|
||||
```
|
||||
[[1m2025-07-17 19:41:43[0m] [[38;5;12mdebug[0m]([2mmain[0m): Debug message 42
|
||||
[[1m2025-07-17 19:41:43[0m] [[38;5;10minfo[0m]([2mmain[0m): Info message { 1, 2, 3, 4 }
|
||||
[[1m2025-07-17 19:41:43[0m] [[38;5;10minfo[0m]([2mmain[0m): Info message "This is a test"
|
||||
[[1m2025-07-17 19:41:43[0m] [[38;5;11mwarning[0m]([2mmain[0m): Warning message main.Options = enum {
|
||||
a,
|
||||
b,
|
||||
c,
|
||||
} = .a
|
||||
[[1m2025-07-17 19:41:43[0m] [[38;5;11mwarning[0m]([2mmain[0m): Warning message main.TaggedUnion = union(enum) {
|
||||
one: i16,
|
||||
two: u32,
|
||||
three: []const u8,
|
||||
nothing,
|
||||
} = .{ .nothing = void }
|
||||
[[1m2025-07-17 19:41:43[0m] [[38;5;11mwarning[0m]([2mmain[0m): Warning message main.Union = union {
|
||||
int: i32,
|
||||
boolean: bool,
|
||||
} = @7fffd1c71048
|
||||
[[1m2025-07-17 19:41:43[0m] [[38;5;9merror[0m]([2mmain[0m): Error message main.Struct = struct {
|
||||
.a = 42,
|
||||
.b = true,
|
||||
.c = []u16: { 1, 2, 3, 4, 5 },
|
||||
.d = "string",
|
||||
.e = main.Options = enum {
|
||||
a,
|
||||
b,
|
||||
c,
|
||||
} = .b,
|
||||
.f = main.TaggedUnion = union(enum) {
|
||||
one: i16,
|
||||
two: u32,
|
||||
three: []const u8,
|
||||
nothing,
|
||||
} = .{ .one = -5 },
|
||||
}
|
||||
[[1m2025-07-17 19:41:43[0m] [[38;5;9merror[0m]([2mmain[0m): Error message main.TaggedUnion = union(enum) {
|
||||
one: i16,
|
||||
two: u32,
|
||||
three: []const u8,
|
||||
nothing,
|
||||
} = .{ .three = "Three" }
|
||||
2025/11/02 11:57:29 [info] Without explicit scope or `.default` scope
|
||||
2025/11/02 11:57:29 [debug](main) Debug message 42
|
||||
2025/11/02 11:57:29 [info](main) Info message { 1, 2, 3, 4 }
|
||||
2025/11/02 11:57:29 [info](main) Info message "This is a test"
|
||||
2025/11/02 11:57:29 [warning](main) Warning message .a
|
||||
2025/11/02 11:57:29 [warning](main) Warning message .{ .nothing = void }
|
||||
2025/11/02 11:57:29 [warning](main) Warning message .{ ... }
|
||||
2025/11/02 11:57:29 [error](main) Error message .{ .a = 42, .b = true, .c = { 1, 2, 3, 4, 5 }, .d = { 115, 116, 114, 105, 110, 103 }, .e = .b, .f = .{ .one = -5 } }
|
||||
2025/11/02 11:57:29 [error](main) Error message .{ .three = { 84, 104, 114, 101, 101 } }
|
||||
```
|
||||
|
||||
## Customization
|
||||
|
||||
For more details about the output customization see the configuration options of the `zlog` module. Following options are available:
|
||||
|
||||
- *timestamp* (default: `true`): Prepend the current timestamp before each log message.
|
||||
- *timestamp* (default: `true`): Prepend the current timestamp before each log message. If disabled the date and time (i.e. `2025/11/02 11:57:29 `) are not prepended to each log message.
|
||||
- *stderr* (default: `true`): Print log messages to stderr.
|
||||
- *file* (default: `""`): File path to log messages to. Without a path no log file will be created and logged to. Can be used in parallel with the *stderr* option
|
||||
- *file* (default: `""`): File path to log (appending; creates if does not exist) messages to. Without a path no log file will be created and logged to. Can be used in parallel with the *stderr* option.
|
||||
|
||||
## Tips
|
||||
---
|
||||
|
||||
The following list shows some tips on how to use logging more effectively. These tips do not apply just to `zlog` (and not even only to zig code).
|
||||
> [!tip]
|
||||
> The following list shows some tips on how to use logging more effectively.
|
||||
> These tips do not apply just to `zlog` (and not even only to zig code).
|
||||
|
||||
- Use `errdefer` to directly print messages on failures in the same function they occur:
|
||||
```zig
|
||||
@@ -162,4 +155,4 @@ The following list shows some tips on how to use logging more effectively. These
|
||||
break :port try fmt.parseInt(u16, buf[0 .. len -| 1], 10);
|
||||
};
|
||||
```
|
||||
- When looking through the output of the log (i.e. written to disk by `program 2> log` when using the _stderr_ build option) the `log` file contains control code characters (*ansi*) for the colored outputs. You can still see them correctly with the following command `less -R log`.
|
||||
- When looking through the output of the log (i.e. written to disk by `program 2> log` when using the *stderr* build option) the `log` file contains control code characters (*ansi*) for the colored outputs. You can still see them correctly with the following command `less -R log`. When using the *file* build option the *ansi* control characters are not omitted when logging to the file.
|
||||
|
||||
Reference in New Issue
Block a user