Italian community of Lazarus and Free Pascal

Programmazione => Componenti Aggiuntivi => Topic aperto da: b.antonino - Marzo 16, 2022, 04:20:50 pm

Titolo: Multilog e Service/Daemon
Inserito da: b.antonino - Marzo 16, 2022, 04:20:50 pm
Ciao a tutti,
Sto creando un servizio e vorrei tracciare quando succede mediante log, stavo provando ad utilizzare multilog e oltre all'evento AfterInstall e BeforeUninstall gli altri eventi tipo suspend, continue ecc non scrivono sul file di log.
Qualcuno ha avuto qualche esperienza in merito?

Grazie
Titolo: Re:Multilog e Service/Daemon
Inserito da: nomorelogic - Marzo 16, 2022, 04:51:40 pm
ciao
se non ricordo male multilog funziona a canali e quindi, devi attivare il canale "file di testo".
Dovresti controllare se avevi il canale attivato (si fa da codice).


Edit:
guarda quì, c'è un esempio di attivazione
https://wiki.lazarus.freepascal.org/MultiLog#Simple_example (https://wiki.lazarus.freepascal.org/MultiLog#Simple_example)
lo trovi in: procedure TForm1.FormCreate

Edit 2:
non vorrei aver capito male
il problema è che mentre in AfterInstall e BeforeUninstall il log funziona, negli altri eventi che citi invece non funziona?
Titolo: Re:Multilog e Service/Daemon
Inserito da: DragoRosso - Marzo 16, 2022, 05:08:16 pm
@nomorelogic,

b.antonino dice che scrive già nel file, quindi il canale è attivato.
Gli eventi "INSTALL" e affini sono gestiti direttamente dall'applicativo e quindi puoi farci più o meno quello che vuoi.
Secondo me il problema è legato al fatto (ricordi molto ma molto lontani) che tutti gli eventi inviati direttamente dal SCM di Windows (come suspend, start, stop) girino nel thread della SCM, quindi se dentro li si fà una qulasiasi cosa che non sia "già prevista" da Windows non penso che funzioni (siamo a livello di service).
Per fare teoricamente qualcosa si dovrebbe usare il metodo principale OnExecute (almeno a quel tempo era così).

Magari però mi sbaglio, sono info a memoria vecchie, molto vecchie.

Il log eventi è già previsto dalla SCM nel LOG di Windows (operazione macchinosa perchè prevede una compilazione preventiva dei "messaggi" con un reosurce manager di Microsoft prima di poterli usare). L'ho fatto una volta sola nella mia vita ... ora mai più  :D.

Proverò a dare una occhiata in giro ...

Mandi
Titolo: Re:Multilog e Service/Daemon
Inserito da: b.antonino - Marzo 16, 2022, 05:18:42 pm
Ciao e grazie per l'interessamento.

si il canale è aperto e scrivo nel log, in precedenza mi sono fatto un programmino di test per vedere come funzionava multilog.
Penso anchio sia un problema di thread, la cosa strana e che se seguo il codice passo passo in debug  dopo aver fatto attach process l'esecuzione passa sulle istruzioni di scrittura su file, ma non scrive niente.

Leggevo sul forum internazionale che per il MemoChannel è stata implementata la QueryAsyncCall, forse manca questa implementazione anche sugli altri canali per funzionare con il multithreading?

Grazie
Titolo: Re:Multilog e Service/Daemon
Inserito da: DragoRosso - Marzo 17, 2022, 12:04:47 am
Sono andato a verificare un codice scritto nel 2007. In tale codice, negli eventi eseguo solo il suspend o il resume dei thread (creati nell'evento OnStart e che poi eseguivano di tutto e di più).

Se usi anche tu ulteriori Thread (come dovresti fare se esegui operazioni non basilari), ti basterebbe che in uno di questi crei due proprietà e che nell'evento Execute dello stesso Thread vai a testarle ed esegui la scittura sul Multilog da li (e resetti le proprietà).

Le due proprietà del Thread le imposti nei due eventi OnPause e OnContinue del Servizio.

Ciao
Titolo: Re:Multilog e Service/Daemon
Inserito da: b.antonino - Marzo 17, 2022, 05:10:15 pm
Ho fatto un po di test, ma non sono riuscito a fare progressi.

Ho lavorato più volte con i thread senza problemi, ma mai con i servizi di windows, diciamo anche che questo era un test in quanto il problema è un altro e devo sviluppare un daemon sotto linux, ma per questo apro un altro thread.

Su questo problema quando avrò un po di tempo provo a tornarci.

Grazie