With using all the generics, you avoid boxing value types, which normally I wouldn't care about but for logging it can actually make a difference