This will call TraceScan and save each line (WriteLine) to a text file.
A time-out can be defined (default 1 minute), and the function returns a clickable File for seamless opening.
ClearAll[TraceToFile] SetAttributes[TraceToFile, HoldFirst] TraceToFile[expr_, filename_String, timeout_: 60] := With[ { file = OpenWrite[filename] }, Echo[timeout, "Timeout: "]; Echo[FileNameJoin[{Directory[], filename}], "File: "]; Echo[ToString[Hold[expr], InputForm], "Expresion"]; TimeConstrained[ TraceScan[ WriteLine[ file, StringTake[ToString[#, InputForm], {10, -2}] ] &, expr ], timeout]; Close[file]; File[FileNameJoin[{Directory[], filename}]] ]
Example
fib[0] = fib[1] = 1; fib[n_] := fib[n - 1] + fib[n - 2]; First@AbsoluteTiming[TracePrint[fib[12]]] (* 20.8437 *) First@AbsoluteTiming@TraceToFile[fib[12], "TraceTest.txt"] (* 0.320829 *)

