Yo te recomendaría la segunda opción:
Código Delphi
[-]
clase TLog
Fichero: string
Lineas: TStrings
procedure Inicializar(UnFichero: string); procedure NuevaLinea(s: string) procedure Dump; end
clase TMatematica1
...
MiLog : Log
...
procedure HacerAglo;
procedure AsignaLog(Log : TLog)
end
procedure TMatematica1.AsignaLog(Log : TLog)
begin
MiLog := Log;
end
procedure TMatematica1.HacerAglo;
var
Resultado : Integer;
begin
if Assigned(MiLog) then MiLog.NuevaLinea('Matematica1 esta HaciendoAlgo');
...
if Assigned(MiLog) then MiLog.NuevaLinea('Resultado de Matematica1: ' + IntToStr(Resultado));
end