Буферизация выходных данных функции фильтрации журналов PowerShell

Мое приложение использует log4cplus для ведения журнала.

Когда я запускаю его в CMD или PowerShell, ведение журнала в порядке, построчно.

Я решил добавить небольшую функцию фильтрации в PS, чтобы сделать вывод красочным.

# Simplified version
function ColoredOutput
{
    process { Write-Host $_ -ForegroundColor Yellow }
}

После этого я запускаю приложение следующим образом:

myapp.exe | ColoredOutput

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

Выглядит для меня как некоторая буферизация вывода. Есть идеи?

UPD: Кажется, проблема связана с некоторыми сообщениями, которые регистрируются с использованием простого std::cout в C++ вместо регистратора.

UPD2: я начинаю думать, что на самом деле C++ запускает вывод. Как видно из рисунка ниже, последнее сообщение от std::cout, все предыдущие - от log4cplus. пример вывода

1 ответ

Нашел это. Как оказалось, действительно, это был log4cplus, который буферизовал. Добавление следующего в конфиг помогает:

log4cplus.appender.STDOUT.ImmediateFlush=true

Спасибо заинтересованным, извините за беспокойство.

Другие вопросы по тегам