TRY...CATCH is the best practice to catch the exception (may be you can use exception.stackTrace for more detail log), but there are many different ways to write and maintain log.
1. stored .txt file at application startup path
2. store log in database, (but if application crash in between many time database connection gets lost and will get only last updated message not exact code line)
3. Stored log in system's application event log
if you look for performance then I may suggest you 'StringBuilder', as it is fast and append all text easily
look at below sample
StringBuilder sb;
...
sb.Append("log something");
...
File.AppendAllText(filePath+"log.txt", sb.ToString());
sb.Clear();
look at below link for more details of log writing
How to write in log Files in C#[
^]