I've considered something like this in the past...
When I was first designing lumberjack, and researching other logging frameworks, I noticed things like separation of filters and formatters and chained formatters, etc. Ultimately I decided to "keep it simple". A formatter is a filter is a formatter. I felt that keeping the architecture conceptually simple (at least at this level) would pay off. My intent is that complexity can be added within the formatter itself. For example, one could craft a "formatter container" which accepts a list of independent formatters, and applies them serially. This allows for advanced techniques such as chaining, headers/footers, etc.
I hope this helps. Let me know your thoughts.