If performance isn't' the main issue, for instance if the class isn't under a lot of load, just do this:
Make your class inherit ContextBoundObject
Apply this attribute to your class [Synchronization]
Your entire class is now only accessible to one thread at a time.
It's really more useful for diagnosis, as speed wise it's nearly the worst case...but to quickly determine "is this weird issue a racing condition", throw it on, re run the test.. if the problem goes away... you know it's a threading problem...
A more performant option is to make your logging class have a thread safe message queue ( that accepts logging messages, then just pull them out and process them sequentially...
For example the ConcurrentQueue class in the new parallelism stuff is a good thread safe queue.
Or user log4net RollingLogFileAppender, which is already thread safe.