AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Systemd Journal mit sd_journal_send

Ein Thema von Stefan1286b · begonnen am 4. Sep 2023 · letzter Beitrag vom 5. Sep 2023
Antwort Antwort
Stefan1286b

Registriert seit: 6. Jan 2012
Ort: Dinklage
25 Beiträge
 
Delphi 11 Alexandria
 
#1

Systemd Journal mit sd_journal_send

  Alt 4. Sep 2023, 11:37
Hallo.
Ich versuche unter Linux einen Systemd basierten Daemon zu erstellen. Nun möchte ich ins Systemd journal Einträge schreiben.
Das funktioniert mit sd_journal_print auch.
Delphi-Quellcode:
const
 libsystemd = 'libsystemd.so.0';
function _sd_journal_print(priority: longint; _format: MarshaledAString; args: array of const): longint; cdecl; external libsystemd Name 'sd_journal_print';

procedure sd_journal_print(APriority: LongInt; const AFormat: string)
var
  LMarshaller: TMarshaller;
  str: MarshaledAString;
begin
  str := LMarshaller.AsAnsi(AFormat, CP_UTF8).ToPointer;
  _sd_journal_print(APriority, str, []);
end;
Aber nun möchte ich sd_journal_send benutzen, da es mehr Möglichkeiten bietet.

Delphi-Quellcode:
function _sd_journal_send(_format: MarshaledAString; args: array of MarshaledAString;ANULL:UINT64): longint; cdecl; external libsystemd Name 'sd_journal_send';

procedure sd_journal_send(APriority: LongInt; const AFormat: string);
var
  LMarshaller: TMarshaller;
  str: MarshaledAString;

begin
  str := LMarshaller.AsAnsi(AFormat, CP_UTF8).ToPointer;
  _sd_journal_send(str, [],0);
end;



begin
  try
   sd_journal_send(4,'MESSAGE=Hello World!');
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
Das war mein letzter Versuch der allerdings auch nicht geklappt hat. Ich bekommen immer ein Segmentation Fault (11)
ChatGPT sagt das es garnicht funktioniert. Dann habe ich ChatGPT gesagt das sd_journal_print auch funktioniert.
Darauf hin hat ChatGPT mit folgenden Code geschrieben:
Delphi-Quellcode:
uses
  sdjournal;

procedure SendToSystemdJournal(const messageText: string; priority: integer);
var
  j: Tsdjournal;
begin
  j := Tsdjournal.Create;
  try
    if j.sd_journal_open() = 0 then
    begin
      if j.sd_journal_send(['MESSAGE=' + messageText, 'PRIORITY=' + IntToStr(priority), nil]) = 0 then
        Writeln('Nachricht erfolgreich an das Systemd-Journal gesendet.')
      else
        Writeln('Fehler beim Senden der Nachricht an das Systemd-Journal.');
    end
    else
      Writeln('Fehler beim Öffnen des Systemd-Journals.');
  finally
    j.Free;
  end;
end;

begin
  try
    // Senden Sie eine Nachricht an das Systemd-Journal
    SendToSystemdJournal('Dies ist eine Testnachricht aus Delphi.', 5);
  except
    on E: Exception do
      Writeln('Fehler: ' + E.Message);
  end;
end.
Und als ich ChatGPT dann gefragt habe wo ich die Unit sdjournal herbekomme hat es mir gesagt die müsste ich selber erstellen. Echt schlau

Nun ja zuürck zum Thema. Der SegFault kommt wahrsheinlich weil die Parameter null terminiert sein müssen. Aber alle Varianten die ich durchgespielt habe funktionieren nicht.

Vielleicht kann einer von euch mir dazu helfen.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Systemd Journal mit sd_journal_send

  Alt 4. Sep 2023, 12:04
Ich habe auch mal ChatGPT gefragt, da ich kein Linux habe kann ich es nicht testen aber die definition ist zu Deiner Unterschiedlich
Delphi-Quellcode:
program JournalSendExample;

{$APPTYPE CONSOLE}

uses
  SysUtils, libsystemd;

function _sd_journal_send(format: PAnsiChar; args: array of const): Integer; cdecl; external 'systemdname 'sd_journal_send';

procedure LogToJournal(const message: string);
begin
  _sd_journal_send('MESSAGE=%s', [message]);
end;

var
  input: string;
begin
  Write('Enter a log message: ');
  Readln(input);

  try
    LogToJournal(input);
    Writeln('Log message sent to journal.');
  except
    on E: Exception do
      Writeln('Error sending log message: ', E.Message);
  end;

  Readln;
end.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Stefan1286b

Registriert seit: 6. Jan 2012
Ort: Dinklage
25 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Systemd Journal mit sd_journal_send

  Alt 4. Sep 2023, 14:28
Das funktioniert so erstmal nicht
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
472 Beiträge
 
#4

AW: Systemd Journal mit sd_journal_send

  Alt 4. Sep 2023, 17:11
Vielleicht kann einer von euch mir dazu helfen.
Für Anregungen zur Umsetzung suche nach TSystemD in der Unit mormot.core.os und die Implementierung in der Include-Datei mormot.core.os.posix.inc. Genutzt wird es z.B. so: sd.IsAvailable . Vielleicht hilft es dir weiter.

Bis bald...
Thomas
  Mit Zitat antworten Zitat
Stefan1286b

Registriert seit: 6. Jan 2012
Ort: Dinklage
25 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Systemd Journal mit sd_journal_send

  Alt 5. Sep 2023, 13:58
Diese Unit kannte ich bereits. Und hat mich ein bisschen weitergeholfen.
journal_sendv: function(var iov: TIoVec; n: integer): integer; cdecl; Die konnte ich auch nicht zum laufen bekommen.

journal_print: function(priority: integer; args: array of const): integer; cdecl; Die Parameter stimmen mit einer Syslog Implementierung über ein.
https://github.com/paolo-rossi/linux...six.Syslog.pas

Daraus konnte ich dann sd_journal_print zum laufen bringen.
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
670 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Systemd Journal mit sd_journal_send

  Alt 5. Sep 2023, 15:41
Hey, das schon probiert? :
Delphi-Quellcode:
  
//_sd_journal_send(str, [],0);
_sd_journal_send(str, [], nil); // <--
Oder den String nicht auf dem Procedure Stack abgelegen, sondern auf Heap?
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:24 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