Comment puis-je faire une statique de la classe thread-safe?

J'ai un simple journalisation simple classe qui est statique. Cependant, ce n'est certainement pas "thread-safe" comme toutes les tentatives d'appel d'écrire dans le même fichier. Je reçois ces exceptions:

The process cannot access the file 'logfile.txt' because it is being used by another process.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
...

Quelle est la meilleure façon de faire thread-safe?

public static class Logger
{
    private static readonly string LOG_FILENAME = "logfile.txt";
    private static readonly string LOG_FOLDER = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "App name");
    private static readonly string LOG_FULLPATH = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "App name", LOG_FILENAME);

    public static void LogMessageToFile(string msg)
    {
        msg = string.Format("{0:G}: {1}{2}", DateTime.Now, msg, Environment.NewLine);
        File.AppendAllText(LOG_FULLPATH, msg);
    }
}

Comme une fonction de journalisation, je voudrais être en mesure d'y accéder à partir de différentes parties de mon code (c'est pourquoi je l'ai choisi pour être statique). Cependant, j'imagine que pour faire thread-safe, je vais toujours avoir à passer d'un objet commun à lock (), je pense que de défaites le but d'une fonction statique. Ou n'est-ce pas le cas?

OriginalL'auteur Doug | 2013-05-14