npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

loglab

v0.4.7

Published

A simple npm library for saving and logging

Readme

logLab

Description

A simple npm library for logging and save your logs in different ways

!!!WARNING!!!
This software product is the implementation of a long-conceived idea to create your own logging tool in various ways
Some of the solutions could have been taken from other solutions that I was the creator of
In any case, the solutions and the concept were invented by me personally and implemented using my algorithms or algorithms taken from open sources
!!!WARNING!!!

Easy start:

install

npm i logLab

При работе с библиотекой можно создать два варианта клиента Publisher

Создание Publisher на основе IPublisher для работы с Apatch Kafka или с файлом.

Publisher - это объект, который отвечает за формирование, публикацию и выбор места куда будут записаны логи
// Импортируем все необходимые библиотеки
import { Publisher } from 'logLab';
    const settings: SettingsPublisher = {
        urls?: ['192.168.100.11:9092'] //- массив с адресами брокеров Kafka для подключения,
        typeTransport?: 1 //- тип способа сохранения логов:
        //1: Сохранение в файл по пути: 'pathSaveFile';
        //2: Сохранение в брокер Apache Kafka по параметрам: 'urls', 'clientId', 'topic', 'serverName', 'retry', 'isTopic', 'logLevel';
        //3: Схраненени в файл и в брокер сообщений    
        clientId?: 'MyClient' //(default - 'client'), 
        topic?: 'log'//(default - 'client'),
        serverName?: 'serverName' //(default - 'unknow'),
        pathSaveFile?: '.data/logs/' //(default - '.data'),
        retry?: {
            maxRetryTime?: //время таймаута последующих попыток подключения
            initialRetryTime?: //Начальное значение, используемое для расчета повтора в миллисекундах (оно все еще рандомизировано в соответствии с фактором рандомизации)
            factor?: //фактор рандомизации default - 0.2
            multiplier?: number //Экспоненциальный фактор default - 2
            retries?: number //Максимальное количество повторных попыток на вызов default - 5
            restartOnFailure?: (e: Error) => Promise<boolean> // перезапускПриНеудачи
        },
        isTopic?: true, //Существует топик или нет и его надо создать (default - false)
        logLevel?: 5, //уровень логирования Kafka (default - 4)
    }
    const publisher: Publisher = new Publisher(settings);

Метод формирования шаблона лога MessageLog

async function controller(req: Request, res: Response) {
  const steps: Step[] = []; 
  publisher.newStep(steps, { data: 'Формирование ответа от сервера' }, 'debug');
  const body = {
    result: 'OK'
  }
  fs.WriteFile('.path/path1', 'Данные', ((err) => {
    publisher.newStep(steps, { data: 'Выполенение записи данных в файл' }, 'debug');
    if(err) publisher.newStep(steps, { data: 'Ошибка записи данных в файл', result: err }, 'error');
  }));
}

Метод создания лога createLog(req: any, res: any, steps: Step[], body?:any): MessageLog - создание сложного лога который требует дополнительных данных, а также может быть создан массив типа 'Step[]' см. Пример ниже

//Examle
import { MessageLog, Publisher, Step } from 'logLab';

const publisher: Publisher = new Publisher(settings);

async function controller(req: Request, res: Response) {
  const steps: Step[] = []; 
  const body: any = { result: "OK" }
  publisher.newStep(steps, { data: 'Формирование ответа от сервера' }, 'debug');
  const body = {
    result: 'OK'
  }
  fs.WriteFile('.path/path1', 'Данные', ((err) => {
    publisher.newStep(steps, { data: 'Выполенение записи данных в файл' }, 'debug');
    if(err) publisher.newStep(steps, { data: 'Ошибка записи данных в файл', result: err }, 'error');
  }));
  const message: MessageLog = publisher.createLog(req, res, steps, body); // message будет равен: 
  /*{
    server: string | undefined; // Название сервиса
    hash: string; // Уникальный hash для поиска
    pid: number; // proccess id
    request: { // Данные запроса:
      id: any; // id запроса 
      method: string; // Метод запроса
      path: string; // Маршрут запроса
      requestTime: number; // Время запроса
      headers: { // Заголовки запроса:
        Host: string | undefined; // Адрес сервера
        ContentType: string | undefined; // Тип контента
      };
      body: string; // Тело сообщения    
    };
    response: { //Данные ответа
      status: number; // Статус ответа
      body: any; // Тело ответа
      responseTime: number; // Время ответа 
    };
    time: number; // Время выполнения запроса
    steps?: [
      {
        level: 'debug',
        dataStep: {
          {
            data: 'Формирование ответа от сервера' // Данные шага выполенения
          }
        } 
      },
      {
        level: 'debug',
        dataStep: {
          {
            data: 'Выполенение записи данных в файл' // Данные шага выполенения
          }
        } 
      },
      {
        level: 'debug',
        dataStep: {
          {
            data: 'Ошибка записи данных в файл' // Данные шага выполенения,
            result: 'Error: ....'
          }
        } 
      }
    ]; // Массив шагов выполнения алгоритма (не обязателен)
  }
} 

Метод занесения лога в массив Step[] newStep(dataStep: DataStep, steps: Step[], logLevel: string): void - создание шага лога типа Step, а метод заполняет массив типа 'Step[]', после чего этот массив используется в MessageLog см. Пример ниже

const publisher: Publisher = new Publisher(settings);

async function controller(req: Request, res: Response) {
  const steps: Step[] = []; 
  const body: any = { result: "OK" }
  publisher.newStep({ data: 'Формирование ответа от сервера' }, steps, 'debug');
}

Метод отправки лога в хранилищеМетод sendLog(dataLog: any | MessageLog, typeTransport?: number) - метод отправки лога во временное хранилище, этот метод можно использовть как со структурой MessageLog или же если не нужно сохранять столько данных, то можно создать свой шаблон лога, см. Пример ниже

Параметры:
dataLog - данные лога, которые необходимо отправить сразу в хранилище
typeTransport - это способ сохранения лога, необязательный параметр (по умолчанию: будет сохранен в файл ".json" по пути указанному в параметре при создании Publisher - "pathSaveFile")
Но в основном существуют следующие значения для сохранения:
1 - Сохранение в файл
2 - Отправка в Kafka
3 - Отправка в файл и в Kafka

const message: MessageLog = publisher.createLog(req, res, steps, body);
1. publisher.sendLog(message);//Сохранится в файл как и publisher.sendLog(message, 1);
2. publisher.sendLog(message, 2);//Отправится в Kafka
3. publisher.sendLog(message, 3);//Отправится в файл и в Kafka

Библиотека предоставляет

    export type MessageLog = {
    server: string | undefined; // Название сервиса
    hash: string; // Уникальный hash для поиска
    pid: number; // proccess id
    request: { // Данные запроса:
      id: any; // id запроса 
      method: string; // Метод запроса
      path: string; // Маршрут запроса
      requestTime: number; // Время запроса
      headers: { // Заголовки запроса:
        Host: string | undefined; // Адрес сервера
        ContentType: string | undefined; // Тип контента
      };
      body: string; // Тело сообщения    
    };
    response: { //Данные ответа
      status: number; // Статус ответа
      body: any; // Тело ответа
      responseTime: number; // Время ответа 
    };
    time: number; // Время выполнения запроса
    steps?: Step[]; // Массив шагов выполнения алгоритма (не обязателен)
  };

  export type DataStep = {
    data: string; // Данные шага выполенения
    result?: any; // Результат шага выполенения (не обязателен)
  };
  
  export type Step = {
    level: string; // Уровень лога (можете сами для себя настроить нужные уровни)
    dataStep: DataStep; // Подробные данные шага
  };

version

v0.4.7

last changes:

  1. Обновлены импорты