Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Логгер

В этом примере мы создадим логгер внутри нашей системы, что форматирует сообщения, добавляя к нему время и уровень

Давайте создадим интерфейс __logger__ с простым методом log:

cd ~/.local/share/irnix
mkdir __logger__
touch __logger__/.self
~/.local/share/irnix
├── .self
└── __logger__
    └── .self

.self:

log: stdin! level? stdout!

Метод log читает сообщение из stdin, форматирует его и выводит отформатированное сообщение.

  • stdin! добавляет проверку, чтобы stdin бы не пустым.
  • level? необязательный аргумент, позволяющий указать уровень.
  • stdout! означает, что метод обязательно в любом случае что-то выводит.

Нашим следующим шагом будет добавление конкретной реализации, которой будет являться logm. Для этого создадим директорию logm в namespace и добавим метод log:

cd ~/.local/share/irnix
mkdir logm
cd logm
ln /bin/logm log
cat ../__logger__/.self > .self
~/.local/share/irnix
├── __logger__
│   ├── .self
│   └── logm -> ../logm
└── logm
    ├── .self
    └── log -> /bin/logm

В данном случае метод log это ссылка на бинарный файл logm, который форматирует сообщение.

echo "message" | irnix e __logger__.log
Sun, 2 Nov 2025 19:58:33 +0000 INFO message

Теперь мы можем вызывать логгер в других скриптах (например в телах других методов) и при этом иметь возможность заменить логгер на другой, при этом не изменяя вызовы.

Например мы можем изменить реализацию log на простой bash скрипт:

#!/bin/bash

echo "$(date +%s): $(</dev/stdin)"