Логгер
В этом примере мы создадим логгер внутри нашей системы, что форматирует сообщения, добавляя к нему время и уровень
Давайте создадим интерфейс __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)"