Кажется, вы можете сделать Packet.buffer
, чтобы стать proto.Buffer
type Packet struct {
length uint32
buffer proto.Buffer
}
...
var packet Packet
packet.length = YouLength
packet.buffer = proto.NewBuffer(make([]byte, YouLength))
//Then you can Marshall in Packet directly and it may be reused.
err := packet.Marshal(message)
make -k > build.log 2>&1
Это должно работать лучше на Вас, потому что это не перенаправляет stderr и stdout отдельно, но перенаправляет stderr к stdout, который должен составить синхронизацию буферизации.
Если Вы хотите зарегистрировать его в файл, а также распечатать его к консоли:
make -k 2>&1 | tee build.log
Я мог бы захватить вывод в 2 отдельные файлы журнала, но тогда я бы не знаю, как их приклеить обратно вместе в один лог-файл.
Склеить их обратно сложно, но есть и правильный ответ, и это работает! Смотрите « Как сохранить или перенаправить stdout и stderr в разные файлы? », автор Vivek Gite.
setbuf (стандартный вывод, NULL); -> отключает буферизацию стандартного вывода