Буферизация выходных данных функции фильтрации журналов 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
Спасибо заинтересованным, извините за беспокойство.