Escape-Sequenzen in Logs

Begonnen von Dr. Boris Neubert, 09 März 2014, 20:15:57

Vorheriges Thema - Nächstes Thema

Dr. Boris Neubert

Hallo,

bei der Überarbeitung von ECMD (und beim Anfassen von DevIo) ist mir aufgefallen, daß gesendete/empfangene Strings ins Log geschrieben werden und dieses unleserlich machen, wenn z.B. LineFeeds im String stehen. Ich rege daher an, mit dem folgenden Patch eine Routine escSeqF() nach fhem.pl zu lassen, die verschiedene Steuerzeichen durch Escape-Sequenzen ersetzt und leserlich macht.  Die Funktion könnte dann später nach und nach um weitere Maskierungen bereichert werden.

Viele Grüße
Boris


Patch anbei!


# replaces some common control chars by escape sequences
# in order to make logs more readable
sub escSeqF($) {
  my ($s)= @_;
 
  my %escSequences = (
      '\t' => "\\t",
      '\n' => "\\n",
      '\r' => "\\r",
      );
 
  foreach my $regex (keys %escSequences) {
    $s =~ s/$regex/$escSequences{$regex}/g;
  }
  return $s;
}



Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

rudolfkoenig

Eigentlich bin ich dagegen, die Log-Werte zu modifizieren, weil:
- danach man nicht mehr weiss, ob wirklich \t oder ein TAB (usw.) gemeldet wurde.
- langer Text (z.Bsp. ein GetHttp-Antwort) unlesbar bzw. fuer copy&paste unbrauchbar wird
- logging etwas langsamer wird
- Wenn ein Modul mit sowas Probleme hat, dann kann es auch loesen, ich empfinde es z.Zt. noch nicht als generelles Problem.

Bin in diesem Punkt aber noch nicht Felsenfest ueberzeugt, und ich lasse mich von der Gegenteil ueberzeugen.

Dr. Boris Neubert

Zitat von: rudolfkoenig am 10 März 2014, 09:21:39
Eigentlich bin ich dagegen, die Log-Werte zu modifizieren, weil:
- danach man nicht mehr weiss, ob wirklich \t oder ein TAB (usw.) gemeldet wurde.

Daran hatte ich auch schon gedacht. Es ließe sich beheben, indem die o.g. Routine auch noch \ durch \\ maskiert.

Zitat
- langer Text (z.Bsp. ein GetHttp-Antwort) unlesbar bzw. fuer copy&paste unbrauchbar wird
- logging etwas langsamer wird
- Wenn ein Modul mit sowas Probleme hat, dann kann es auch loesen, ich empfinde es z.Zt. noch nicht als generelles Problem.

Ja, ich würde es definitiv jedem Modul überlassen, ob es die Antworten maskiert oder nicht. Ich brauche sie in mindestens zwei meiner Module und halte sie daher besser in der Zentrale aufgehoben (wie utf8ToLatin1 und latin1ToUtf8, die ja auch dorthin gewandert sind).

Ich stoße mich derzeit noch an DevIo_SimpleWrite - das ist (aus dem Gedächtnis) die einzige Stelle in DevIo.pm, wo Traffic geloggt wird, der über die Schnittstelle geht. Wäre es nicht besser, in DevIo gar keinen Traffic zu loggen und es komplett den Modulen zu überlassen, ob und was an Traffic geloggt wird?

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

rudolfkoenig

Zitatund halte sie daher besser in der Zentrale aufgehoben (wie utf8ToLatin1 und latin1ToUtf8, die ja auch dorthin gewandert sind).
Das verstehe ich, und ich habe es jetzt eingecheckt, allerdings als escapeLogLine, da "escSeqF" mir nichts sagt.

ZitatWäre es nicht besser, in DevIo gar keinen Traffic zu loggen und es komplett den Modulen zu überlassen, ob und was an Traffic geloggt wird?

Ich finde als default logging bei verbose 5 nicht schlecht, weiterhin muesste man durch eine Aenderung viele Module anfassen und testen. Auf der anderen Seite ist DevIo_SimpleWrite mit seinem select weder gross noch perfekt, und muss nicht in jedem Modul verwendet werden.


Dr. Boris Neubert

Zitat von: rudolfkoenig am 10 März 2014, 10:59:15
Das verstehe ich, und ich habe es jetzt eingecheckt, allerdings als escapeLogLine, da "escSeqF" mir nichts sagt.

Danke.

Zitat
Ich finde als default logging bei verbose 5 nicht schlecht, weiterhin muesste man durch eine Aenderung viele Module anfassen und testen. Auf der anderen Seite ist DevIo_SimpleWrite mit seinem select weder gross noch perfekt, und muss nicht in jedem Modul verwendet werden.

Es betrifft tatsächlich die Module

00_FBAHA.pm
00_KM271.pm
00_TCM.pm
00_THZ.pm
00_ZWDongle.pm
10_FRM.pm
40_RFXCOM.pm
45_TRX.pm
66_ECMD.pm
70_XBMC.pm
73_PRESENCE.pm
98_autocreate.pm

Und zum Teil heftig.

Ich möchte gerne auch bei verbose=5 selbst bestimmen können, was meine Module loggen und was nicht und dafür nicht DevIo_SimpleWrite unnötig duplizieren müssen. Wenn das Argument nicht verfängt, werde ich in ECMD ein Attribut logTraffic einbauen, das den Verwendern speziell für die Phase der Entwicklung der Klassendefinition ein Mitschneiden des Traffics auf der Schnittstelle ermöglicht.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Dr. Boris Neubert

Zitat von: rudolfkoenig am 10 März 2014, 10:59:15
Das verstehe ich, und ich habe es jetzt eingecheckt, allerdings als escapeLogLine, da "escSeqF" mir nichts sagt.

Anbei ein Patch, der escapeLogLine() so erweitert, daß eine Reihe von Escape-Sequenzen erkannt werden, der Backslash gedoppelt wird, und alle restlichen Sonderzeichen (bis dezimal 31) durch ihre oktale Darstellung \xxx ersetzt werden.

Mit der Bitte um Prüfung und Einbau.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

rudolfkoenig

Dieser Patch ist identisch mit dem ersten.

Dr. Boris Neubert

Sorry, too many fhem.pl.patch files around error...

Jetzt aber!
bn
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

rudolfkoenig


Dr. Boris Neubert

Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!