mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-29 23:47:10 +00:00
93_Log2Syslog: Adapt to change Logging in fhem.pl, Forum:#131790
git-svn-id: https://svn.fhem.de/fhem/trunk@27112 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
7a74817c63
commit
8e8dce6abf
@ -1,5 +1,6 @@
|
|||||||
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
||||||
# Do not insert empty lines here, update check depends on it.
|
# Do not insert empty lines here, update check depends on it.
|
||||||
|
- change: 93_Log2Syslog: Adapt to change Logging in fhem.pl, Forum:#131790
|
||||||
- change: 93_DbLog: Syntaxcheck of DbLogValueFn attribute, Forum:#131777
|
- change: 93_DbLog: Syntaxcheck of DbLogValueFn attribute, Forum:#131777
|
||||||
- change: 72_FRITZBOX: our Deklaration nach my (package global)
|
- change: 72_FRITZBOX: our Deklaration nach my (package global)
|
||||||
- bugfix: 49_SSCAM: substitution of placeholder [$#]TIME corrected
|
- bugfix: 49_SSCAM: substitution of placeholder [$#]TIME corrected
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
##########################################################################################################################
|
##########################################################################################################################
|
||||||
# 93_Log2Syslog.pm
|
# 93_Log2Syslog.pm
|
||||||
#
|
#
|
||||||
# (c) 2017-2021 by Heiko Maaz
|
# (c) 2017-2023 by Heiko Maaz
|
||||||
# e-mail: Heiko dot Maaz at t-online dot de
|
# e-mail: Heiko dot Maaz at t-online dot de
|
||||||
#
|
#
|
||||||
# This script is part of fhem.
|
# This script is part of fhem.
|
||||||
@ -106,6 +106,7 @@ BEGIN {
|
|||||||
|
|
||||||
# Versions History intern:
|
# Versions History intern:
|
||||||
my %vNotesIntern = (
|
my %vNotesIntern = (
|
||||||
|
"5.12.5" => "23.01.2023 Adaptation to change \%logInform in fhem.pl, Forum:#131790 ",
|
||||||
"5.12.4" => "27.02.2021 don't split data by CRLF if EOF is used (in getIfData) ",
|
"5.12.4" => "27.02.2021 don't split data by CRLF if EOF is used (in getIfData) ",
|
||||||
"5.12.3" => "02.11.2020 avoid do Logfile archiving which was executed in seldom (unknown) cases ",
|
"5.12.3" => "02.11.2020 avoid do Logfile archiving which was executed in seldom (unknown) cases ",
|
||||||
"5.12.2" => "15.05.2020 permit content of 'exclErrCond' to fhemLog strings ",
|
"5.12.2" => "15.05.2020 permit content of 'exclErrCond' to fhemLog strings ",
|
||||||
@ -386,7 +387,7 @@ return;
|
|||||||
###############################################################################
|
###############################################################################
|
||||||
sub Define {
|
sub Define {
|
||||||
my ($hash, $def) = @_;
|
my ($hash, $def) = @_;
|
||||||
my @a = split("[ \t][ \t]*", $def);
|
my @a = split m{\s+}x, $def;
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
|
|
||||||
return "Error: Perl module ".$MissModulSocket." is missing. Install it on Debian with: sudo apt-get install libio-socket-multicast-perl" if($MissModulSocket);
|
return "Error: Perl module ".$MissModulSocket." is missing. Install it on Debian with: sudo apt-get install libio-socket-multicast-perl" if($MissModulSocket);
|
||||||
@ -411,8 +412,8 @@ sub Define {
|
|||||||
readingsSingleUpdate ($hash, 'Parse_Err_LastData', 'n.a.', 0);
|
readingsSingleUpdate ($hash, 'Parse_Err_LastData', 'n.a.', 0);
|
||||||
Log3slog ($hash, 3, "Log2Syslog $name - entering Syslog servermode ...");
|
Log3slog ($hash, 3, "Log2Syslog $name - entering Syslog servermode ...");
|
||||||
initServer ("$name,global");
|
initServer ("$name,global");
|
||||||
|
}
|
||||||
} else { # Sendermode
|
else { # Sendermode
|
||||||
$hash->{MODEL} = "Sender";
|
$hash->{MODEL} = "Sender";
|
||||||
setidrex($hash,$a[3]) if($a[3]);
|
setidrex($hash,$a[3]) if($a[3]);
|
||||||
setidrex($hash,$a[4]) if($a[4]);
|
setidrex($hash,$a[4]) if($a[4]);
|
||||||
@ -426,14 +427,13 @@ sub Define {
|
|||||||
return "Bad regexp: starting with *"
|
return "Bad regexp: starting with *"
|
||||||
if((defined($hash->{HELPER}{EVNTLOG}) && $hash->{HELPER}{EVNTLOG} =~ m/^\*/x) || (defined($hash->{HELPER}{FHEMLOG}) && $hash->{HELPER}{FHEMLOG} =~ m/^\*/x));
|
if((defined($hash->{HELPER}{EVNTLOG}) && $hash->{HELPER}{EVNTLOG} =~ m/^\*/x) || (defined($hash->{HELPER}{FHEMLOG}) && $hash->{HELPER}{FHEMLOG} =~ m/^\*/x));
|
||||||
|
|
||||||
# nur Events dieser Devices an NotifyFn weiterleiten, NOTIFYDEV wird gesetzt wenn möglich
|
notifyRegexpChanged($hash, $hash->{HELPER}{EVNTLOG}) if($hash->{HELPER}{EVNTLOG}); # nur Events dieser Devices an NotifyFn weiterleiten, NOTIFYDEV wird gesetzt wenn möglich
|
||||||
notifyRegexpChanged($hash, $hash->{HELPER}{EVNTLOG}) if($hash->{HELPER}{EVNTLOG});
|
|
||||||
|
|
||||||
$hash->{PEERHOST} = $a[2]; # Destination Host (Syslog Server)
|
$hash->{PEERHOST} = $a[2]; # Destination Host (Syslog Server)
|
||||||
}
|
}
|
||||||
|
|
||||||
$hash->{SEQNO} = 1; # PROCID in IETF, wird kontinuierlich hochgezählt
|
$hash->{SEQNO} = 1; # PROCID in IETF, wird kontinuierlich hochgezählt
|
||||||
$logInform{$hash->{NAME}} = \&fhemLog; # Funktion die in hash %loginform für $name eingetragen wird
|
$logInform{$hash->{NAME}} = \&FHEM::Log2Syslog::fhemLog; # Funktion die in hash %loginform für $name eingetragen wird
|
||||||
$hash->{HELPER}{SSLVER} = "n.a."; # Initialisierung
|
$hash->{HELPER}{SSLVER} = "n.a."; # Initialisierung
|
||||||
$hash->{HELPER}{SSLALGO} = "n.a."; # Initialisierung
|
$hash->{HELPER}{SSLALGO} = "n.a."; # Initialisierung
|
||||||
$hash->{HELPER}{LTIME} = time(); # Init Timestmp f. Ratenbestimmung
|
$hash->{HELPER}{LTIME} = time(); # Init Timestmp f. Ratenbestimmung
|
||||||
@ -1582,6 +1582,7 @@ sub Attr { ## no critic 'complexity'
|
|||||||
return qq{Mode "$aVal" is only valid for model "Sender"} if($aVal eq "maintenance" && $hash->{MODEL} !~ /Sender/);
|
return qq{Mode "$aVal" is only valid for model "Sender"} if($aVal eq "maintenance" && $hash->{MODEL} !~ /Sender/);
|
||||||
$do = $aVal?1:0;
|
$do = $aVal?1:0;
|
||||||
}
|
}
|
||||||
|
|
||||||
$do = 0 if($cmd eq "del");
|
$do = 0 if($cmd eq "del");
|
||||||
$st = ($do&&$aVal=~/maintenance/)?"maintenance":($do&&$aVal==1)?"disabled":"initialized";
|
$st = ($do&&$aVal=~/maintenance/)?"maintenance":($do&&$aVal==1)?"disabled":"initialized";
|
||||||
|
|
||||||
@ -1593,7 +1594,8 @@ sub Attr { ## no critic 'complexity'
|
|||||||
downServer($hash,1); # Serversocket schließen und wieder öffnen
|
downServer($hash,1); # Serversocket schließen und wieder öffnen
|
||||||
InternalTimer(gettimeofday()+0.5, "FHEM::Log2Syslog::initServer", "$name,global", 0);
|
InternalTimer(gettimeofday()+0.5, "FHEM::Log2Syslog::initServer", "$name,global", 0);
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
closeSocket($hash,1); # Clientsocket schließen
|
closeSocket($hash,1); # Clientsocket schließen
|
||||||
downServer ($hash); # Serversocket schließen
|
downServer ($hash); # Serversocket schließen
|
||||||
}
|
}
|
||||||
@ -1605,9 +1607,11 @@ sub Attr { ## no critic 'complexity'
|
|||||||
$do = ($aVal) ? 1 : 0;
|
$do = ($aVal) ? 1 : 0;
|
||||||
}
|
}
|
||||||
$do = 0 if($cmd eq "del");
|
$do = 0 if($cmd eq "del");
|
||||||
|
|
||||||
if ($do == 0) {
|
if ($do == 0) {
|
||||||
delete $hash->{SSL};
|
delete $hash->{SSL};
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
if($hash->{MODEL} =~ /Collector/) {
|
if($hash->{MODEL} =~ /Collector/) {
|
||||||
$attr{$name}{protocol} = "TCP" if(AttrVal($name, "protocol", "UDP") ne "TCP");
|
$attr{$name}{protocol} = "TCP" if(AttrVal($name, "protocol", "UDP") ne "TCP");
|
||||||
TcpServer_SetSSL($hash);
|
TcpServer_SetSSL($hash);
|
||||||
@ -1618,6 +1622,7 @@ sub Attr { ## no critic 'complexity'
|
|||||||
|
|
||||||
closeSocket($hash,1); # Clientsocket schließen
|
closeSocket($hash,1); # Clientsocket schließen
|
||||||
downServer ($hash,1); # Serversocket schließen
|
downServer ($hash,1); # Serversocket schließen
|
||||||
|
|
||||||
if($hash->{MODEL} =~ /Collector/) {
|
if($hash->{MODEL} =~ /Collector/) {
|
||||||
InternalTimer(gettimeofday()+0.5, "FHEM::Log2Syslog::initServer", "$name,global", 0); # Serversocket öffnen
|
InternalTimer(gettimeofday()+0.5, "FHEM::Log2Syslog::initServer", "$name,global", 0); # Serversocket öffnen
|
||||||
readingsSingleUpdate ($hash, 'Parse_Err_No', 0, 1); # Fehlerzähler für Parse-Errors auf 0
|
readingsSingleUpdate ($hash, 'Parse_Err_No', 0, 1); # Fehlerzähler für Parse-Errors auf 0
|
||||||
@ -1804,18 +1809,23 @@ return "";
|
|||||||
|
|
||||||
#################################################################################
|
#################################################################################
|
||||||
# FHEM system logging
|
# FHEM system logging
|
||||||
|
# Übergabe aus fhem.pl: ($li, "$tim $loglevel: $text")
|
||||||
|
# $li -> Schlüssel aus %logInform
|
||||||
#################################################################################
|
#################################################################################
|
||||||
sub fhemLog {
|
sub fhemLog {
|
||||||
my ($name,$raw) = @_;
|
my $name = shift;
|
||||||
|
my $raw = shift;
|
||||||
|
|
||||||
my $hash = $defs{$name};
|
my $hash = $defs{$name};
|
||||||
my $rex = $hash->{HELPER}{FHEMLOG};
|
my $rex = $hash->{HELPER}{FHEMLOG};
|
||||||
my $st = ReadingsVal($name,"state","active");
|
my $st = ReadingsVal ($name, 'state', 'active');
|
||||||
my $sendsev = AttrVal($name, "respectSeverity", ""); # Nachrichten welcher Schweregrade sollen gesendet werden
|
my $sendsev = AttrVal ($name, 'respectSeverity', ''); # Nachrichten welcher Schweregrade sollen gesendet werden
|
||||||
my $uef = AttrVal($name, "useEOF", 0);
|
my $uef = AttrVal ($name, 'useEOF', 0);
|
||||||
|
|
||||||
my ($prival,$sock,$err,$ret,$data,$pid,$sevAstxt);
|
my ($prival,$sock,$err,$ret,$data,$pid,$sevAstxt);
|
||||||
|
|
||||||
if(IsDisabled($name)) {
|
if(IsDisabled($name)) {
|
||||||
my $evt = ($st eq $hash->{HELPER}{OLDSTATE})?0:1;
|
my $evt = $st eq $hash->{HELPER}{OLDSTATE} ? 0 : 1;
|
||||||
readingsSingleUpdate ($hash, "state", $st, $evt);
|
readingsSingleUpdate ($hash, "state", $st, $evt);
|
||||||
$hash->{HELPER}{OLDSTATE} = $st;
|
$hash->{HELPER}{OLDSTATE} = $st;
|
||||||
return;
|
return;
|
||||||
@ -1825,17 +1835,18 @@ sub fhemLog {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
my ($date,$time,$vbose,undef,$txt) = split(" ",$raw,5);
|
my ($date,$time,$vbose,$txt) = split " ", $raw, 4;
|
||||||
$txt = charFilter ($hash, $txt);
|
$txt = charFilter ($hash, $txt);
|
||||||
$date =~ s/\./-/gx;
|
$date =~ s/\./-/gx;
|
||||||
my $tim = $date." ".$time;
|
$vbose =~ s/://x;
|
||||||
|
my $tim = $date.' '.$time;
|
||||||
|
|
||||||
if($txt =~ m/^$rex$/x || "$vbose: $txt" =~ m/^$rex$/x) {
|
if($txt =~ m/^$rex$/x || "$vbose: $txt" =~ m/^$rex$/x) {
|
||||||
my $otp = "$vbose: $txt";
|
my $otp = "$vbose: $txt";
|
||||||
$otp = "$tim $otp" if AttrVal($name,'addTimestamp',0);
|
$otp = "$tim $otp" if(AttrVal ($name, 'addTimestamp', 0));
|
||||||
($prival, $sevAstxt) = setPrival ($hash, $txt, $vbose);
|
($prival, $sevAstxt) = setPrival ($hash, $txt, $vbose);
|
||||||
if($sendsev && $sendsev !~ m/$sevAstxt/x) {
|
|
||||||
# nicht senden wenn Severity nicht in "respectSeverity" enthalten
|
if($sendsev && $sendsev !~ m/$sevAstxt/x) { # nicht senden wenn Severity nicht in "respectSeverity" enthalten
|
||||||
Log3slog ($name, 5, "Log2Syslog $name - Warning - Payload NOT sent due to Message Severity not in attribute \"respectSeverity\"\n");
|
Log3slog ($name, 5, "Log2Syslog $name - Warning - Payload NOT sent due to Message Severity not in attribute \"respectSeverity\"\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1866,16 +1877,17 @@ return;
|
|||||||
sub sendTestMsg {
|
sub sendTestMsg {
|
||||||
my ($hash,$own) = @_;
|
my ($hash,$own) = @_;
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
|
|
||||||
my $st = ReadingsVal ($name, "state", "active");
|
my $st = ReadingsVal ($name, "state", "active");
|
||||||
|
|
||||||
my ($prival,$ts,$sock,$tim,$date,$time,$err,$ret,$data,$pid,$otp);
|
my ($prival,$ts,$sock,$tim,$date,$time,$err,$ret,$data,$pid,$otp);
|
||||||
|
|
||||||
if($own) {
|
if($own) { # eigene Testmessage ohne Formatanpassung raw senden
|
||||||
# eigene Testmessage ohne Formatanpassung raw senden
|
|
||||||
$data = $own;
|
$data = $own;
|
||||||
$pid = $hash->{SEQNO}; # PayloadID zur Nachverfolgung der Eventabfolge
|
$pid = $hash->{SEQNO}; # PayloadID zur Nachverfolgung der Eventabfolge
|
||||||
$hash->{SEQNO}++;
|
$hash->{SEQNO}++;
|
||||||
|
}
|
||||||
} else {
|
else {
|
||||||
$ts = TimeNow();
|
$ts = TimeNow();
|
||||||
($date,$time) = split q{ }, $ts;
|
($date,$time) = split q{ }, $ts;
|
||||||
$date =~ s/\./-/gx;
|
$date =~ s/\./-/gx;
|
||||||
@ -1893,10 +1905,12 @@ sub sendTestMsg {
|
|||||||
|
|
||||||
if ($sock) {
|
if ($sock) {
|
||||||
$ret = syswrite $sock, $data."\n" if($data);
|
$ret = syswrite $sock, $data."\n" if($data);
|
||||||
|
|
||||||
if($ret && $ret > 0) {
|
if($ret && $ret > 0) {
|
||||||
Log3slog ($name, 4, "$name - Payload sequence $pid sent\n");
|
Log3slog ($name, 4, "$name - Payload sequence $pid sent\n");
|
||||||
$st = "maintenance";
|
$st = "maintenance";
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
$err = $!;
|
$err = $!;
|
||||||
$st = "write error: $err";
|
$st = "write error: $err";
|
||||||
Log3slog ($name, 3, "$name - Warning - Payload sequence $pid NOT sent: $err\n");
|
Log3slog ($name, 3, "$name - Warning - Payload sequence $pid NOT sent: $err\n");
|
||||||
@ -2066,9 +2080,11 @@ sub writeToSocket {
|
|||||||
|
|
||||||
if(defined $ret && $ret == $ld) {
|
if(defined $ret && $ret == $ld) {
|
||||||
Log3slog($name, 4, "Log2Syslog $name - Payload sequence $pid sent. ($ret of $ld bytes)\n");
|
Log3slog($name, 4, "Log2Syslog $name - Payload sequence $pid sent. ($ret of $ld bytes)\n");
|
||||||
} elsif (defined $ret && $ret != $ld) {
|
}
|
||||||
|
elsif (defined $ret && $ret != $ld) {
|
||||||
Log3slog($name, 3, "Log2Syslog $name - Warning - Payload sequence $pid NOT completely sent: $ret of $ld bytes \n");
|
Log3slog($name, 3, "Log2Syslog $name - Warning - Payload sequence $pid NOT completely sent: $ret of $ld bytes \n");
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
my $e = $!;
|
my $e = $!;
|
||||||
$err = "write error: $e";
|
$err = "write error: $e";
|
||||||
Log3slog($name, 3, "Log2Syslog $name - Warning - Payload sequence $pid NOT sent: $e\n");
|
Log3slog($name, 3, "Log2Syslog $name - Warning - Payload sequence $pid NOT sent: $e\n");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user