Thread Einbindung von Perl Modulen (5 answers)
Opened by tk102 at 2020-09-04 10:58

tk102
 2020-09-04 10:58
#192501 #192501
User since
2020-02-20
10 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,

ich komme aktuell nicht wirklich weiter.

Ich habe eine Sub geschrieben,welche sich in meinem Perl Modul befindet in dem ich jede Menge nützliche Dinge habe. Diese sind dort in verschiedenen Subs gespeichert.

Es dient dazu, Log Einträge anstatt in ein File, in eine Datenbank zu schreiben.
Code: (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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
sub LogDb {

my $Name = shift;
my $Severity = shift;
my $Message = shift;
# Aktuelle Uhrzeit und Datum
my $Date = strftime "%Y-%m-%d", localtime(time);
my $Time = strftime "%H:%M:%S", localtime(time);

if (!defined $Name) {
$Name = "Name";
}

if (!defined $Message) {
$Message = "Message";
}

if (!defined $Severity){
$Severity = "I";
}

# define DB Parameters
my $DBLogServer = '***';
my $DBLogDatabase = '***';
my $DBLogUsername = '***';
my $DBLogPassword = '***';
my $DBLogdbh;

if ($Severity eq "A") {
# Connect to DB
my $DBLogConnection = "driver={SQL Server};Server=$DBLogServer;Database=$DBLogDatabase;UID=$DBLogUsername;PWD=$DBLogPassword";
$DBLogdbh = DBI->connect("DBI:ODBC:$DBLogConnection") or die "Cannot Connect";
}

if ($Severity eq "I") {
# Build Statement and execute
my $DBLogStatement = "Insert Into Logging (Date,Time,Priority,Message,Modul) VALUES ('$Date','$Time','$Severity','$Message','$Name')";
my $DBLogsth = $DBLogdbh->prepare( $DBLogStatement );
$DBLogsth->execute();
}

if ($Severity eq "Z") {
# Disconnct DB
$DBLogdbh->disconnect();
}
}


Diese wird dann vom eigentlichen Programm folgendermaßen aufgerufen:

Code: (dl )
1
2
3
LogDb($Modul,"A", "Module $Modul was started.");
LogDb($Modul,"I", "Here is an Information");
LogDb($Modul,"Z", "End");


Mein Problem ist nun, das ich nicht für jeden neuen Log Eintrag eine Datenbank Verbindung öffnen möchte, sondern diese nur zu Beginn des Scriptes Öffnen will und am Ende wieder schließen möchte. So wie es jetzt ist, funktioniert es nicht, da er am Anfang die Verbindung aufbaut, aber im nächsten Aufruf die Verbindung nicht mehr kennt :(
Dies soll sich allerdings im Modul Code abspielen und nicht im eigentlichen Programm, sodass ich meine bisherigen Scripte einfach durch Ersetzen von Log in LogDb abändern kann.

Eingebunden habe ich es mit use.
Last edited: 2020-09-04 11:00:21 +0200 (CEST)

View full thread Einbindung von Perl Modulen