Rsyslog has the ability to filter messages by pattern matching properties within a message.
:[property], [!][compare type], "[string]"
So to match all proftpd logs and send them to a specific file, we can search the app-name property for proftpd
:app-name, isequal, "proftpd" /var/log/proftpd/proftpd.log ~
That would be placed above the typical catch all rule and the ~ will cause all matched messages to be discarded so they aren't processed again and sent to other logfiles.
:msg, contains, "error" /var/log/errors.log :app-name, isequal, "sudo" /var/log/sudo.log