fock-logger - v7.0.1
    Preparing search index...

    FAQ (Часто задаваемые вопросы)

    Вы можете определить любые строковые уровни в LoggerLevels. Например:

    const levels = {
    levels: { trace: -1, debug: 0, info: 1, warn: 2, error: 3, fatal: 4 },
    level: "info",
    };

    Проверьте:

    • Убедитесь, что writeFile: true передан в контексте вызова или в baseContext.
    • Проверьте права на запись в директорию.
    • Файл создаётся автоматически при первом вызове write, если директория существует.

    Используйте separator в контексте:

    await logger.execute("Сообщение", {
    context: { level: "info", separator: " | " },
    });
    const timestampService = new TimestampService();
    timestampService.disable();

    Или в конструкторе можно сразу выключить:

    const timestampService = new TimestampService();
    timestampService.turn(false);

    Передайте свою функцию форматирования:

    const timestampService = new TimestampService({
    formatter: (date) =>
    date.toLocaleString("ru-RU", { timeZone: "Europe/Moscow" }),
    });

    По умолчанию TimestampWrapper уже добавляет скобки. Если вы хотите изменить обёртку, создайте свой класс, реализующий WrapperType, или используйте EmptyWrapper для отключения обёртки:

    const timestampService = new TimestampService({
    wrapper: new EmptyWrapper(),
    });

    Наследуйте BaseFormatter и реализуйте canFormat и format. Затем подключите через FormatterHandler.

    Пример см. в разделе Расширение и кастомизация.

    Используйте ErrorFormatter, который автоматически обрабатывает ошибки в стандартном наборе форматтеров. Если вы заменили formatterHandler, добавьте ErrorFormatter в цепочку.

    NullableFormatter преобразует их в строки "null" и "undefined". Он также входит в стандартный набор.

    При создании логгера укажите userInputSettings:

    const logger = new Logger({
    // ...
    userInputSettings: {
    prefix: "Input:",
    separator: " ",
    },
    });

    Метод read возвращает пустую строку, если пользователь нажал Enter без ввода. Вы можете проверить это самостоятельно.

    let userInput = "";
    while (!userInput.trim()) {
    userInput = await logger.read("Введите ваше имя (обязательно):", {
    context: { level: "info" },
    });
    if (!userInput.trim()) {
    console.log("Имя не может быть пустым. Попробуйте снова.");
    }
    }
    console.log(`Привет, ${userInput}!`);

    В Node.js вы можете использовать обработчик события SIGINT. Это не входит в библиотеку, но вы можете обернуть вызов read:

    process.on("SIGINT", () => {
    console.log("\nВвод прерван");
    process.exit();
    });

    const result = await logger.read("Введите текст:", {
    context: { level: "info" },
    });

    Запись в файл происходит асинхронно через поток в режиме append, что минимизирует блокировку. Однако для высоконагруженных систем рекомендуется использовать отдельный поток или буферизацию.

    Нет, библиотека использует Node.js API (fs, process). Для браузера потребуется отдельная адаптация.

    Убедитесь, что у процесса есть права на запись в указанную директорию. FileService автоматически создаёт директорию, если её нет, но только если родительская директория существует и доступна для записи.

    Метод read блокирует поток ввода до завершения. Если попытаться вызвать его повторно до завершения первого, будет выброшена ошибка. Дождитесь завершения предыдущего вызова.

    Укажите name в конструкторе:

    const logger = new Logger({
    name: "MyApp",
    // ...
    });

    Да, создайте несколько экземпляров с разными конфигурациями.

    Вы можете создать свой аффикс, унаследовав BaseAffix с типом suffix:

    class MySuffix extends BaseAffix {
    public constructor(data: AffixChildConstructor) {
    super({ type: "suffix", ...data });
    }
    }

    Затем подключите его в AffixHandler.

    Минимальная версия — 7.6.0 (из-за использования async/await и fs/promises). Рекомендуется использовать LTS-версии Node.js.

    Да, библиотека написана на TypeScript и поставляется с полной типизацией.

    В разделе Быстрый старт и в тестах проекта (если есть).

    Да, просто не передавайте fileService в конструктор.

    Установите log: false в контексте:

    await logger.execute("Секретно", {
    context: { level: "info", log: false, writeFile: true },
    });

    Вы можете передать любой объект в input, если он реализует toString() или если вы добавили кастомный форматтер для его обработки.