Skip to content

Commit

Permalink
tweak logging outputs once more
Browse files Browse the repository at this point in the history
  • Loading branch information
ryanatkn committed Nov 5, 2024
1 parent 2cc4100 commit 2e2fb84
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 12 deletions.
5 changes: 5 additions & 0 deletions .changeset/three-donkeys-marry.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@ryanatkn/belt": patch
---

tweak logging outputs once more
3 changes: 3 additions & 0 deletions src/lib/log.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,16 @@ import * as assert from 'uvu/assert';

import {Logger, type Logger_State} from '$lib/log.js';

const log = new Logger();

interface Test_Logger_Context {
logged_args: any;
logger_state: Logger_State;
}
const create_test_logger_context = (): Test_Logger_Context => {
const collect_args = (...log_args: any[]) => {
ctx.logged_args = log_args;
log.debug(`log_args`, log_args);
};
const ctx: Test_Logger_Context = {
logged_args: undefined, // stores the result of the latest log call
Expand Down
48 changes: 36 additions & 12 deletions src/lib/log.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import type {styleText} from 'node:util';
import {DEV} from 'esm-env';

import {EMPTY_ARRAY, to_array} from '$lib/array.js';
import {traverse} from './object.js';

export type Log_Level = 'off' | 'error' | 'warn' | 'info' | 'debug';

Expand Down Expand Up @@ -232,28 +233,51 @@ export class Logger extends Base_Logger {
static console: Logger_State['console'] = console;
static prefixes: Logger_Prefixes_And_Suffixes_Getter = EMPTY_GETTER;
static suffixes: Logger_Prefixes_And_Suffixes_Getter = EMPTY_GETTER;
static error_prefixes: Logger_Prefixes_And_Suffixes_Getter = (st) => [
// TODO ideally `is_multiline` would be done in `#resolve_values`
static error_prefixes: Logger_Prefixes_And_Suffixes_Getter = (st, _args) => [
st('red', `${Logger.char_error.repeat(3)}error\n`),
];
static error_suffixes: Logger_Prefixes_And_Suffixes_Getter = (st) => [
static error_suffixes: Logger_Prefixes_And_Suffixes_Getter = (st, _args) => [
st('red', `\n${Logger.char_error.repeat(3)}`),
];
static warn_prefixes: Logger_Prefixes_And_Suffixes_Getter = (st) => [
st('red', `${Logger.char_warn.repeat(3)}warn\n`),
static warn_prefixes: Logger_Prefixes_And_Suffixes_Getter = (st, _args) => [
st('yellow', `${Logger.char_warn.repeat(3)}warn\n`),
];
static warn_suffixes: Logger_Prefixes_And_Suffixes_Getter = (st) => [
st('red', `\n${Logger.char_warn.repeat(3)}`),
static warn_suffixes: Logger_Prefixes_And_Suffixes_Getter = (st, _args) => [
st('yellow', `\n${Logger.char_warn.repeat(3)}`),
];
static info_prefixes: Logger_Prefixes_And_Suffixes_Getter = (st) => [
st('gray', Logger.char_info),
static info_prefixes: Logger_Prefixes_And_Suffixes_Getter = (st, args) => [
st('gray', is_multiline(args) ? `${Logger.char_info.repeat(3)}info\n` : Logger.char_info),
];
static info_suffixes: Logger_Prefixes_And_Suffixes_Getter = EMPTY_GETTER;
static debug_prefixes: Logger_Prefixes_And_Suffixes_Getter = (st) => [
st('gray', Logger.char_debug),
static info_suffixes: Logger_Prefixes_And_Suffixes_Getter = (st, args) => [
is_multiline(args) ? st('gray', `\n${Logger.char_info.repeat(3)}`) : '',
];
static debug_prefixes: Logger_Prefixes_And_Suffixes_Getter = (st, args) => [
st('gray', is_multiline(args) ? `${Logger.char_debug.repeat(3)}debug\n` : Logger.char_info),
];
static debug_suffixes: Logger_Prefixes_And_Suffixes_Getter = (st, args) => [
is_multiline(args) ? st('gray', `\n${Logger.char_debug.repeat(3)}`) : '',
];
static debug_suffixes: Logger_Prefixes_And_Suffixes_Getter = EMPTY_GETTER;
}

// TODO improve
const is_multiline = (data: unknown): boolean => {
let multiline = false;
traverse(data, (_key, value) => {
if (multiline) return;
const type = typeof value;
if (type === 'string') {
const m = value.includes('\n');
if (m) multiline = true;
} else if (type === 'object' && value !== null) {
// TODO hacky and inefficient
multiline = true;
}
return false;
});
return multiline;
};

/**
* The `System_Logger` is distinct from the `Logger`
* to cleanly separate Felt's logging from user logging, decoupling their log levels.
Expand Down

0 comments on commit 2e2fb84

Please sign in to comment.