Yo creo para algo está la parte "initialization" y "finalization" de la unidad. Así, creas y destruyes el log en los lugares adecuados.
Si una unidad hace un uses de la unidad UnitLog, primero se inicializa la unidad UnitLog (creandose la variable Log y estando disponible antes de que se cree la primera ventana que hace uso de él). Al destruirse, se destruye cuando ya
nadie hace uso de dicha unidad, por tanto es de nuevo, el lugar adecuado.
En lo personal, tengo Mi log creado en una única .pas como una clase y siempre abro el archivo, guardo el string y cierro el archivo de log. Es algo egoista en el uso del disco duro, pero siempre tendré todos los mensajes de depuración aún cuando haya excepciones anidadas y cosas raras... nunca se queda el archivo de log abierto, con mensajes pendientes ni nada de eso...
Código Delphi
[-]
type TlpLog = class(TObject)
...
end;
var log:TlpLog;
implementation
....
initialization
log := TlpLog.Create;
finalization
log.free;
Con solo hacer un "uses" de esta unidad, ya puedes usar el log.