I am unhappy with how this codebase turned out as a result of sort of throwing features in haphazardly. It could be cleaned up a lot, especially how the loggers are implemented. Loggers should probably be split into their own package.