Index: perl/lib/BarnOwl/Logging.pm
===================================================================
--- perl/lib/BarnOwl/Logging.pm	(revision 03fbf6607dc414a0baf05fa28c228f949a59d39a)
+++ perl/lib/BarnOwl/Logging.pm	(revision dce72c12ddfe50eeadca497b9a1b549ffb20574a)
@@ -89,4 +89,14 @@
                            . "is selected both incoming and outgoing messages are\n"
                            . "logged."
+        });
+
+    BarnOwl::new_variable_string('logbasepath',
+        {
+            default       => '~/zlog',
+            validsettings => '<path>',
+            summary       => 'path for logging non-zephyr messages',
+            description   => "Specifies a directory which must exist.\n"
+                           . "Each non-zephyr protocol gets its own subdirectory in\n"
+                           . "logbasepath, and messages get logged there."
         });
 
@@ -141,5 +151,5 @@
 This method calls C<log_filenames> on C<MESSAGE> to determine the list
 of filenames to which C<MESSAGE> gets logged.  All filenames are
-relative to C<MESSAGE->log_base_path>.  If C<MESSAGE->log_to_all_file>
+relative to C<MESSAGE->log_path>.  If C<MESSAGE->log_to_all_file>
 returns true, then the filename C<"all"> is appended to the list of
 filenames.
@@ -153,5 +163,5 @@
     my @filenames = $m->log_filenames;
     push @filenames, 'all' if $m->log_to_all_file;
-    return map { sanitize_filename($m->log_base_path, $_) } @filenames;
+    return map { sanitize_filename($m->log_path, $_) } @filenames;
 }
 
Index: perl/lib/BarnOwl/Message.pm
===================================================================
--- perl/lib/BarnOwl/Message.pm	(revision 5093c6f01fd51f20f4fe96ce622a09811e6eeaae)
+++ perl/lib/BarnOwl/Message.pm	(revision dce72c12ddfe50eeadca497b9a1b549ffb20574a)
@@ -3,4 +3,6 @@
 
 package BarnOwl::Message;
+
+use File::Spec;
 
 use BarnOwl::Message::Admin;
@@ -165,8 +167,8 @@
 
 Returns a list of filenames to which this message should be logged.
-The filenames should be relative to the path returned by
-C<log_base_path>.  See L<BarnOwl::Logging::get_filenames> for the
-specification of valid filenames, and for what happens if this
-method returns an invalid filename.
+The filenames should be relative to the path returned by C<log_path>.
+See L<BarnOwl::Logging::get_filenames> for the specification of valid
+filenames, and for what happens if this method returns an invalid
+filename.
 
 =cut
@@ -174,11 +176,11 @@
 sub log_filenames {
     my ($m) = @_;
-    my $filename = lc($m->type);
-    $filename = "unknown" if !defined $filename || $filename eq '';
-    if ($m->is_incoming && $m->pretty_sender) {
-        $filename .= ":" . $m->pretty_sender;
-    } elsif ($m->is_outgoing && $m->pretty_recipient) {
-        $filename .= ":" . $m->pretty_recipient;
-    }
+    my $filename;
+    if ($m->is_incoming) {
+        $filename = $m->pretty_sender;
+    } elsif ($m->is_outgoing) {
+        $filename = $m->pretty_recipient;
+    }
+    $filename = "unknown" if !defined($filename) || $filename eq '';
     return ($filename);
 }
@@ -199,15 +201,39 @@
 }
 
+=head2 log_path MESSAGE
+
+Returns the folder in which all messages of this class get logged.
+
+Defaults to C<log_base_path>/C<log_subfolder>.
+
+=cut
+
+sub log_path {
+    my ($m) = @_;
+    return File::Spec->catfile($m->log_base_path, $m->log_subfolder);
+}
+
 =head2 log_base_path MESSAGE
 
-Returns the base path for logging, the folder in which all messages
-of this class get logged.
-
-Defaults to the BarnOwl variable C<logpath>.
+Returns the base path for logging.  See C<log_path> for more information.
+
+Defaults to the BarnOwl variable C<logbasepath>.
 
 =cut
 
 sub log_base_path {
-    return BarnOwl::getvar('logpath');
+    return BarnOwl::getvar('logbasepath');
+}
+
+=head2 log_subfolder MESSAGE
+
+Returns the subfolder of C<log_base_path> to log messages in.
+
+Defaults to C<lc($m->type)>.
+
+=cut
+
+sub log_subfolder {
+    return lc(shift->type);
 }
 
Index: perl/lib/BarnOwl/Message/Zephyr.pm
===================================================================
--- perl/lib/BarnOwl/Message/Zephyr.pm	(revision 3374de932d0a44851a5b6a3bf89bd8f4cfd5f2f5)
+++ perl/lib/BarnOwl/Message/Zephyr.pm	(revision dce72c12ddfe50eeadca497b9a1b549ffb20574a)
@@ -274,5 +274,5 @@
 }
 
-sub log_base_path {
+sub log_path {
     my ($m) = @_;
     if ($m->log_to_class_file) {
