I have 2 FileHandlers that write out to two separate files, and the amount of I/O occurring is slowing down my application quite a bit:
I\'ve decided to hav
You should really consider using SLF4J.
These issues you are describing come along with rolling your own logger. SLF4J is really commonly used because it is not very intrusive, should you decide that you need something different you can swap it out for a different framework.
http://saltnlight5.blogspot.ca/2013/08/how-to-configure-slf4j-with-different.html
http://www.slf4j.org/manual.html
If you do decide to stick with your own logger I would say that you should start by making it a singleton with several logwriters attached to log levels, you then setup a non-blocking queue for each logger(there are tons of examples of this out there) and simply call log(logLevel, logOrigin, logMessage) and under the hood send this to each logwriter, which would be a non-blocking queue that runs on a thread for each logwriter.
Each logwriter should be it's own thread, not each log, and you only need one logger as all it is is a short hand to place things in your logwriter's queues from anywhere in your app.