Changeset 5093c6f
- Timestamp:
- Aug 16, 2017, 12:53:41 PM (7 years ago)
- Branches:
- master
- Children:
- 4ead7b3
- Parents:
- 9bfab40
- git-author:
- Jason Gross <jgross@mit.edu> (07/12/11 16:19:57)
- git-committer:
- Jason Gross <jasongross9@gmail.com> (08/16/17 12:53:41)
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
logging.c
r9bfab40 r5093c6f 30 30 } 31 31 32 /* should we be logging this message? */ 33 if (!owl_log_shouldlog_message(m)) { 34 owl_function_debugmsg("owl_log_message: not logging message"); 35 return; 36 } 37 38 owl_log_perl(m); 32 g_free(owl_perlconfig_call_with_message("BarnOwl::Logging::log", m)); 39 33 40 34 owl_function_debugmsg("owl_log_message: leaving"); 41 }42 43 /* Return 1 if we should log the given message, otherwise return 0 */44 int owl_log_shouldlog_message(const owl_message *m) {45 const owl_filter *f;46 47 /* If there's a logfilter and this message matches it, log */48 f=owl_global_get_filter(&g, owl_global_get_logfilter(&g));49 if (f && owl_filter_message_match(f, m)) return(1);50 51 /* otherwise we do things based on the logging variables */52 53 /* skip login/logout messages if appropriate */54 if (!owl_global_is_loglogins(&g) && owl_message_is_loginout(m)) return(0);55 56 /* check direction */57 if ((owl_global_get_loggingdirection(&g)==OWL_LOGGING_DIRECTION_IN) && owl_message_is_direction_out(m)) {58 return(0);59 }60 if ((owl_global_get_loggingdirection(&g)==OWL_LOGGING_DIRECTION_OUT) && owl_message_is_direction_in(m)) {61 return(0);62 }63 64 if (owl_message_is_type_zephyr(m)) {65 if (owl_message_is_personal(m) && !owl_global_is_logging(&g)) return(0);66 if (!owl_message_is_personal(m) && !owl_global_is_classlogging(&g)) return(0);67 } else {68 if (owl_message_is_private(m) || owl_message_is_loginout(m)) {69 if (!owl_global_is_logging(&g)) return(0);70 } else {71 if (!owl_global_is_classlogging(&g)) return(0);72 }73 }74 return(1);75 35 } 76 36 … … 302 262 } 303 263 304 void owl_log_append(const owl_message *m, const char *filename) {305 char *buffer = owl_perlconfig_message_call_method(m, "log", 0, NULL);306 owl_log_enqueue_message(buffer, filename);307 g_free(buffer);308 }309 310 264 void owl_log_outgoing_zephyr_error(const owl_zwrite *zw, const char *text) 311 265 { 312 owl_message *m; 313 /* create a present message so we can pass it to 314 * owl_log_shouldlog_message(void) 315 */ 316 m = g_slice_new(owl_message); 266 owl_message *m = g_slice_new(owl_message); 317 267 /* recip_index = 0 because there can only be one recipient anyway */ 318 268 owl_message_create_from_zwrite(m, zw, text, 0); 319 if (!owl_log_shouldlog_message(m)) { 320 owl_message_delete(m); 321 return; 322 } 323 char *buffer = owl_perlconfig_message_call_method(m, "log_outgoing_error", 0, NULL); 324 char *filenames_string = owl_perlconfig_call_with_message("BarnOwl::Logging::get_filenames_as_string", m); 325 char **filenames = g_strsplit(filenames_string, " ", 0); 326 char **filename_ptr; 327 328 for (filename_ptr = filenames; *filename_ptr != NULL; filename_ptr++) { 329 owl_log_enqueue_message(buffer, *filename_ptr); 330 } 331 332 g_free(filenames_string); 333 g_strfreev(filenames); 269 g_free(owl_perlconfig_call_with_message("BarnOwl::Logging::log_outgoing_error", m)); 334 270 owl_message_delete(m); 335 }336 337 void owl_log_perl(const owl_message *m)338 {339 char *filenames_string = owl_perlconfig_call_with_message("BarnOwl::Logging::get_filenames_as_string", m);340 char **filenames = g_strsplit(filenames_string, "\n", 0);341 char **filename_ptr;342 g_free(filenames_string);343 344 for (filename_ptr = filenames; *filename_ptr != NULL; filename_ptr++) {345 owl_log_append(m, *filename_ptr);346 }347 348 g_strfreev(filenames);349 271 } 350 272 -
perl/lib/BarnOwl/Logging.pm
reea7bed4 r5093c6f 15 15 Modules wishing to customize how messages are logged should override the 16 16 relevant subroutines in the appropriate subclass of L<BarnOwl::Message>. 17 18 Modules wishing to log errors sending outgoing messages should call 19 L<BarnOwl::Logging::log_outgoing_error> with the message that failed 20 to be sent. 17 21 18 22 =head2 EXPORTS … … 76 80 } 77 81 78 # For ease of use in C 79 sub get_filenames_as_string { 80 my @rtn; 81 foreach my $filename (BarnOwl::Logging::get_filenames(@_)) { 82 $filename =~ s/\n/_/g; 83 push @rtn, $filename; 82 =head2 should_log_message MESSAGE 83 84 Determines whether or not the passed message should be logged. 85 86 To customize the behavior of this method, override 87 L<BarnOwl::Message::should_log>. 88 89 =cut 90 91 sub should_log_message { 92 my ($m) = @_; 93 # If there's a logfilter and this message matches it, log. 94 # pass quiet=1, because we don't care if the filter doesn't exist 95 return 1 if BarnOwl::message_matches_filter($m, BarnOwl::getvar('logfilter'), 1); 96 # otherwise we do things based on the logging variables 97 # skip login/logout messages if appropriate 98 return 0 if $m->is_loginout && BarnOwl::getvar('loglogins') eq 'off'; 99 # check direction 100 return 0 if $m->is_outgoing && BarnOwl::getvar('loggingdirection') eq 'in'; 101 return 0 if $m->is_incoming && BarnOwl::getvar('loggingdirection') eq 'out'; 102 return $m->should_log; 103 } 104 105 =head2 log MESSAGE 106 107 Call this method to (potentially) log a message. 108 109 To customize the behavior of this method for your messages, override 110 L<BarnOwl::Message::log>, L<BarnOwl::Message::should_log>, 111 L<BarnOwl::Message::log_base_path>, and/or 112 L<BarnOwl::Message::log_filenames>. 113 114 =cut 115 116 sub log { 117 my ($m) = @_; 118 return unless BarnOwl::Logging::should_log_message($m); 119 my $log_text = $m->log; 120 foreach my $filename (BarnOwl::Logging::get_filenames($m)) { 121 BarnOwl::Logging::enqueue_text($log_text, $filename); 84 122 } 85 return join("\n", @rtn); 123 } 124 125 =head2 log_outgoing_error MESSAGE 126 127 Call this method to (potentially) log an error in sending an 128 outgoing message. Errors get logged to the same file(s) as 129 successful messages. 130 131 To customize the behavior of this method for your messages, override 132 L<BarnOwl::Message::log_outgoing_error>, 133 L<BarnOwl::Message::should_log>, 134 L<BarnOwl::Message::log_base_path>, and/or 135 L<BarnOwl::Message::log_filenames>. 136 137 =cut 138 139 sub log_outgoing_error { 140 my ($m) = @_; 141 return unless BarnOwl::Logging::should_log_message($m); 142 my $log_text = $m->log_outgoing_error; 143 foreach my $filename (BarnOwl::Logging::get_filenames($m)) { 144 BarnOwl::Logging::enqueue_text($log_text, $filename); 145 } 86 146 } 87 147 -
perl/lib/BarnOwl/Message.pm
r9bfab40 r5093c6f 225 225 chomp $body; 226 226 return "ERROR (BarnOwl): $recipient\n$body\n\n"; 227 } 228 229 =head2 should_log MESSAGE 230 231 Returns true if we should log C<MESSAGE>. This does not override 232 user settings; if the BarnOwl variable C<loggingdirection> is in, 233 and C<MESSAGE> is outgoing and does not match the C<logfilter>, it 234 will not get logged regardless of what this method returns. 235 236 Note that this method I<does> override the BarnOwl C<logging> 237 variable; if a derived class overrides this method and does not 238 provide an alternative BarnOwl variable (such as C<classlogging>), 239 the overriding method should check the BarnOwl C<logging> variable. 240 241 Defaults to returning the value of the BarnOwl variable C<logging>. 242 243 =cut 244 245 sub should_log { 246 return BarnOwl::getvar('logging') eq 'on'; 227 247 } 228 248 -
perl/lib/BarnOwl/Message/Zephyr.pm
reea7bed4 r5093c6f 281 281 } 282 282 283 sub should_log { 284 my ($m) = @_; 285 if ($m->log_to_class_file) { 286 return BarnOwl::getvar('classlogging') eq 'on'; 287 } else { 288 return BarnOwl::getvar('logging') eq 'on'; 289 } 290 } 291 283 292 1; -
perlglue.xs
rda7341e r5093c6f 683 683 OUTPUT: 684 684 RETVAL 685 686 MODULE = BarnOwl PACKAGE = BarnOwl::Logging 687 688 void 689 enqueue_text(log_text, filename) 690 const char * log_text 691 const char * filename 692 CODE: 693 owl_log_enqueue_message(log_text, filename);
Note: See TracChangeset
for help on using the changeset viewer.