Thread Wie organisier ich Dual-Life Module (Logging) (3 answers)
Opened by lichtkind at 2013-06-22 14:46

topeg
 2013-06-22 15:29
#168549 #168549
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Ich löse das meist so, das ich ein "log-handler" einbaue:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
my %log_handler;

sub log_handler
{
  my ($self,$sub)=@_;
  return 0 unless ref $sub eq 'CODE';
  $log_handler{$self}=$sub;
  return 1;
}

#...

sub new
{
  #...

  $log_handler{$self}=sub{ 1 };
  return $self;
}

#...

  $log_handler{$self}->('type' => \@messages);

#...


Dann kann jeder sein bevorzugtes Logging-Modul einbauen oder ganz weglassen. Du musst nur definieren welche Nachrichtentypen es gibt.
Mir reicht meist. "error" "warning" "message" "info"
"error" verändern den Rückgabewert der Methode (Fehler halt)
Bei "warning" kann der Rückgabewert inkorrekt sein
"message" sind Informationen über Veränderungen im Programm/System
"info" erzählt was gerade passiert.

Noch vor ein paar Jahren habe ich häufig ein eigenes Logging für jedes Modul geschrieben, speziell für Fehlermeldungen. Aber das wird bei vielen Modulen schnell unübersichtlich und bedeutet einiges an zusätzlichem Code. Der Weg über einen Handler ist einfach kurz und leicht zu verwenden. Wenn möglich erbe ich von einem kleinen Modul "my_logging" das ungefähr so aussieht:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package my_logging;
my %log_handler;

sub __log_init { $log_handler{$_[0]}=sub{ 1 }; }

sub log_handler
{
  my ($class,$sub)=@_;
  return 0 unless ref $sub eq 'CODE';
  $log_handler{$class}=$sub;
  return 1;
}

sub __do_log { return $log_handler{shift()}->(@_); }

1;

View full thread Wie organisier ich Dual-Life Module (Logging)