Designing a better logger class
This code is not thread safe.  You synchronize (lock) while adding to the queue, but your code which removes from the code does not lock the queue, and will always run on a background thread, which is going to cause potential race conditions.

If you really must write your own logging, I would, at the least, look into using ConcurrentQueue&lt;T&gt; to avoid the need for locking on adding.  BlockingCollection&lt;T&gt; would make this far simpler, as you could just have a thread call GetConsumingEnumerable() to process items as they're added.

That being said, logging is something that's been handled many times, and handled well.  You'd be far better off using something like the new Semantic Logging Application Block (from P&amp;P) or even log4net.