Функции Write и WriteLine, которые принимают строки, представляют только минимальную пару функций, которые вы должны переопределить. В TraceListener есть и другие функции записи, которые вы можете по желанию переопределять, которые принимают объекты.
TraceListener, однако, предназначен для использования с функциями трассировки фреймворка. Поэтому, если вы не собираетесь использовать этот класс для «прослушивания» трассировки, проходящей через платформу, вам может быть лучше использовать интерфейс, более подходящий для ваших конкретных потребностей трассировки.
Возможно, наследование от System.IO.TextWriter будет лучше для вашего случая. У него много методов записи, но я считаю, что они направляют весь свой вывод через Write и WriteLine, так что если вы просто переопределите эти две функции, вы получите много бесплатно.