Log::Report, where Log::Dispatch meets Locale::TextDomain
Traditionally, Perl has a very limited way of expressing that something is going wrong: either warn or die. Syslog, as example, has a more fine-grained way to say how serious the problems are. In Log::Report, the programmer of a module only produces the message and an indication about why the message is produced. Only on the level of the main program, the decision is made who to inform and how, in which language and what character-set.