Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Log-Datei Schreiben unter Linux (https://www.delphipraxis.net/202013-log-datei-schreiben-unter-linux.html)

lowmax_5 18. Sep 2019 17:58

Log-Datei Schreiben unter Linux
 
Hallo,

ich möchte ein einfaches Logfile unter Linux erstellen im Pfad '/var/log/mylog.log'

Unter Windows funktioniert dieses einwandfrei, aber unter Linux wird nichts geschrieben.


Code:
var
  tf_logfile: TextFile;
begin
  AssignFile(tf_logfile, '/var/log/mylog.log');

  if not FileExists('/var/log/mylog.log') then
  begin
{$I-}
    Rewrite(tf_logfile);
  end;
  if IOResult <> 0 then
    exit;

{$I-}

  append(tf_logfile);
  writeLn(tf_logfile, 'Eintrag');
  flush(tf_logfile);
  closeFile(tf_logfile);
Nachtrag: \ gegen / getauscht

hoika 18. Sep 2019 19:36

AW: Log-Datei Schreiben unter Linux
 
Hallo,
bist Du sicher, dass Du in /var/log überhaupt Schreibrechte hast?
Das ist doch ein Verzeichnis für System-Logs wie z.B. messages?

Dalai 18. Sep 2019 19:44

AW: Log-Datei Schreiben unter Linux
 
Sofern das Programm nicht mit Superuser-Rechten (aka root) ausgeführt wird, ist das auch nicht weiter verwunderlich, denn standardmäßig hat kein User Schreibrechte in /var/log.

Außerdem sollte man sich sehr zurückhalten mit dem direkten Schreiben von Logfiles unter Linux, insbesondere in /var/log, denn nicht zum Spaß gibt es sogenannte Syslog-Facilities, d.h. Programme sollten ins Syslog schreiben und im jeweiligen Syslog-Daemon wird dann eingestellt, in welches Logfile die Meldungen aus dieser Facility geschrieben werden sollen: Beispiel für Ubuntu bei Thomas Krenn. Leider hab ich keine Ahnung, was man tun muss, um in einem eigenen Programm ins Syslog zu schreiben - vielleicht gibt's dafür schon fertige Units, an die man andocken kann?

Grüße
Dalai

lowmax_5 18. Sep 2019 19:50

AW: Log-Datei Schreiben unter Linux
 
Es handelt sich um ein ApacheLinkModul, und da Apache auch in \var\log\apache2\ seine Logs schreibt, dachte ich mir, dass es dort gut aufgehoben ist.
Das LinkModul wird ja auch im Rechtekontext des Apache ausgeführt...

DeddyH 18. Sep 2019 20:09

AW: Log-Datei Schreiben unter Linux
 
Von den Rechten einmal abgesehen, kommt Linux mit den Backslashes eigentlich klar?

lowmax_5 18. Sep 2019 20:43

AW: Log-Datei Schreiben unter Linux
 
Zitat:

Von den Rechten einmal abgesehen, kommt Linux mit den Backslashes eigentlich klar?
Oops, ich meinte natürlich /var/log/mylog.log . Soviel habe ich auch schon mit bekommen, dass es diesen Unterschied gibt ..:oops:

Dalai 18. Sep 2019 22:00

AW: Log-Datei Schreiben unter Linux
 
Wie klinkst du dich denn in den Apache ein? Es muss doch irgendein Interface oder sowas geben, das der Apache nutzen kann, Informationen von den Modulen abzufragen (und umgekehrt).

In der offiziellen Anleitung Developing modules for the Apache HTTP Server 2.4 finden sich Angaben zu diversen Hooks, unter anderem auch zum Logging (mein Suchbegriff auf der Seite war schlicht "log").

Denn eigentlich sollte das der Weg sein, dem Apache die Logmeldungen einfach nur zu übergeben, und über die Apache Konfig (z.B. im VHost) wird dann festgelegt, was in welchem Log landen soll. (Nur zur Info: Es gibt unter Linux diverse Daemons, die tatsächlich am Syslog vorbei arbeiten/protokollieren, z.B. Apache, Bind9, MySQL, Postgres usw. Aber manchmal - auch im Fall vom Apache - lässt sich dort analog zum Syslog konfigurieren, was mit welchem Loglevel in welche Datei geschrieben werden soll.)

Grüße
Dalai

lowmax_5 18. Sep 2019 22:14

AW: Log-Datei Schreiben unter Linux
 
@Dalai: Das wird wohl der korrekte Weg sein, die Logmeldungen an den Apache zu übergeben und diese dann im VHost zu konfigurieren.

Mein Ziel war es jedoch nur ein paar Infos aus dem Apache LinkModul in eine Textdatei wegzuschreiben. Das müsste auch nicht zwingend nach /var/log/.. sein. War vielleicht zu einfach gedacht. Was mich nur interessiert: Warum geht das nicht? Was ist der Grund dafür?

Dalai 18. Sep 2019 22:38

AW: Log-Datei Schreiben unter Linux
 
Zitat:

Zitat von lowmax_5 (Beitrag 1446951)
Was mich nur interessiert: Warum geht das nicht? Was ist der Grund dafür?

Zugriffsrechte. Der Apache dürfte als Nutzer www-data laufen, Schreibrechte unter /var/log/apache2 hat aber nur root (so ist jedenfalls die Konfiguration auf einem Ubuntu). Damit Apache selbst dort schreiben kann, hat dieser einen einzelnen Prozess als Nutzer root laufen; dieser Prozess dürfte aber nicht mit der Bearbeitung von HTTP-Requests beschäftigt sein sondern kümmert sich eben um Dinge, die mehr Rechte erfordern, z.B. Logging.

Nur nebenbei: Selbst wenn du die Zugriffsrechte dieses Verzeichnisses anpassen solltest, kann es immer noch sein, dass du von AppArmor, SELinux oder chroot daran gehindert wirst, dorthin zu schreiben. Konkretes Beispiel aus meiner eigenen Erfahrung: MySQL aufgesetzt, in dessen Konfig das Datenverzeichnis vom standardmäßigen /var/lib/mysql geändert auf /media/daten/mysql und anschließend gewundert, warum das Starten des MySQL fehlschlägt, obwohl das Verzeichnis für jedermann les- und schreibbar war (und dem Nutzer mysql gehörte). Lösung war, dem AppAmor zu sagen, dass MySQL in /media/daten/mysql lesen und schreiben darf.

Grüße
Dalai

lowmax_5 18. Sep 2019 22:48

AW: Log-Datei Schreiben unter Linux
 
Vielen Dank für die Erklärung.:thumb: Das erklärt nun einiges zum Verhalten unter Linux...


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz