Ok, so I started throwing some source together. And, I thought about a loggin class.. which would also be good to have an exception class.. etc etc.
Then, it struck me. THe app will already have to deal with Ogre::Exceptions, OIS::Exceptions, CEGUI::Exceptions.. Ogre::Log, CEGUI::Logs... So, why add yet another logger and exception class? The answer i came up with was not to. Just use either CEGUI or Ogre log and use all the exception classes.
I do not want to abstract everything out, so this is fine. The only question.. which logger to use? Well, I think that the CEGUI one is to specific dealing with just Windows and widgets. The Ogre one has everything else - materials, meshes, videos, etc, etc.. So, that is a good choice. Plus, I can catch CEGUI exceptions (anything else is not worth logging) and have a flag to disable the CEGUI logger. For debug builds for instance, having all logs is benificial - in release mode, you don't really want to have a million log files for users to see.
Anyway, this does not apply to just logs and exceptions. I will use as much code from each lib as needed. Sure, this will lead to a tight integration, but that is the point. I will probably use CEGUI::Strings when dealing with text input/output (since I hear it has good unicode support). And internally, the lib will just make use of std::string's.