If your intent is simply to log information about the exception, then just pass the Exception to the appropriate logging method and let the logger do the work for you:
log.error("Exception caught", e)
Most logging APIs support a Throwable as an argument to their debug(), error(), etc. methods. No need to reinvent the wheel unless you have a real reason to do so.
Regarding your questions about architecture (the "is there a better idea" part), there's a basic rule you can follow: if you can do something about the exception (e.g. rollback a transaction), then catch it and do what's appropriate. If you can't recover from it, then throw it from your method and let the caller take care of it.
Ultimately, exceptions that are unrecoverable will propagate up the stack to the container (whether that's a main method, servlet container, or something else). The container can then write logs, send alerts, or handle the exception in some other way.
Don't use a general Exception (like you suggested). Don't catch something, log it, and then go on processing like it didn't happen (unless that really makes sense for your specific situation). If you can't handle the exception, throw it from the method you're in and let a method higher up take care of it.
Logger? log4j? slf4j? Plain oldjava.util.logging?e.printStackTrace()or pass theExceptionto aLoggermethod, you'll get a printed stacktrace, which is much more valuable.