Правильная архитектура CMS, без static методов, с глобальным хранилищем и инициализатором Классов.

fixxxer

К.О.
Партнер клуба
Placeholder names SHOULD be composed only of the characters A-Z, a-z, 0-9, underscore _, and period .. The use of other characters is reserved for future modifications of the placeholders specification.
Выделенная фраза настораживает и провоцирует на магию: future modifications в такой формулировке несомненно приводят ко всяким $префиксам @и %прочим *извратам.

И вообще, это же логгер, а не форматтер. Я бы предпочел, чтобы сообщение было строкой ИЛИ объектом, поддерживающим __toString, а что там как форматируется, на уровне PSR вообще не трогать.
 

Вурдалак

Продвинутый новичок
Без context будет сплошная конкатенация и sprintf. Всем не угодишь, короче.
 

fixxxer

К.О.
Партнер клуба
Не будет, просто надо разделить на три интерфейса:
Log\LoggerInterface
Log\MessageInterface
Log\FormatterInterface

и не навязывать context как единственное решение
 

fixxxer

К.О.
Партнер клуба
А это смотря как сделать.

1) переименовываем context в params, ну потому что никакой это не контекст
2) оставляем все то же самое, только в качестве сообщения принимаем объект с __toString() или строку, и опционально array|Traversable $params
3) добавляем setFormatter, перебивающий дефолтный, и делаем factory method для message.

Итого
1) сохраняется совместимость с предложенным в psr-3 (вот только методы переименовать, угу)
2) {} из обязательных требований переезжает в дефолтный formatter
3) сразу дышится свободнее. Например, можно напрямую логировать exceptions без идиотской магии :) хотя это настолько частый и важный случай, что метод logException хочется все же иметь отдельно
 
Сверху