Надёжно перехватить консоль можно только хукнув SPEW_ функцию библиотеки tier0, заменив на свою. Как это сделать, написано почти полностью в исходнике Cleaner-а, только автор почему-то искал функцию по паттерну, хотя можно было сделать проще и лучше. Прототипы SPEW_ функций можно найти в SDK 2013, файл dbg.h.
Если бы вопрос касался не кс:го, а сурс движка, я бы сделать что-то вроде:
SpewOutputFunc_t DefaultSpewFunction;
В CServerGameDLL::DLLInit:
DefaultSpewFunction = GetSpewOutputFunc();
SpewOutputFunc(CleanerSpewFunc);
В CServerGameDLL::DLLShutdown:
SpewOutputFunc(DefaultSpewFunction);
Ну, а в самой CleanerSpewFunc уже делать сравнение строки, приходящей в функцию (можно позволить себе регулярки), если найдено искомое - отправляем в лог на диск сервера. Cleaner действует по тому же принципу, только он не пропускает указанные сообщения, возвращая SPEW_CONTINUE (см. функцию DETOUR_DECL_STATIC2 в модуле плагина). Тебе надо заменить либо дописать туда свою логику, скидывающую в лог то, что тебя интересует.