Topic: Modulo LOGGING - utilizzo in rete  (Letto 676 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Snake Plissken

  • python unicellularis
  • *
  • Post: 34
  • Punti reputazione: 0
    • Mostra profilo
Modulo LOGGING - utilizzo in rete
« il: Luglio 18, 2011, 17:10 »
Estratto dal Logging Cookbook, della documentazione ufficiale della 2.7:
Citazione
Logging to a single file from multiple processes
Although logging is thread-safe, and logging to a single file from multiple threads in a single process is supported, logging to a single file from multiple processes is not supported, because there is no standard way to serialize access to a single file across multiple processes in Python. If you need to log to a single file from multiple processes, one way of doing this is to have all the processes log to a SocketHandler, and have a separate process which implements a socket server which reads from the socket and logs to file.


Questo cosa vuol dire? Che il log file viene allocato dal primo processo e gli altri processi non riescono ad aprirlo?
Secondo voi è possibile condividere tra 2 o più PC, sia in lettura che scrittura, un unico log file che risiede su una directory condivisa in rete?
Senza ricorrere alla complicazione dei socket, intendo (complicazione per un pivello come il sottoscritto).

Offline Snake Plissken

  • python unicellularis
  • *
  • Post: 34
  • Punti reputazione: 0
    • Mostra profilo
Re: Modulo LOGGING - utilizzo in rete
« Risposta #1 il: Luglio 22, 2011, 10:02 »
UP.
Nessuno ne sa niente?  :thinking:
Grazie in anticipo.

Offline Bakuriu

  • python sapiens sapiens
  • ******
  • Post: 2.267
  • Punti reputazione: 2
  • Katon, Goukakyuu no jutsu!
    • Mostra profilo
    • Jack's Blackboard - Il mio blog
Re: Modulo LOGGING - utilizzo in rete
« Risposta #2 il: Luglio 22, 2011, 12:13 »
Se non sbaglio quello che dice è:
1)Sviluppi un processo(una specie di "log server") che scrive i log che gli arrivano tramite socket dagli altri processi
2)Ad ogni processo effettui i log inviandoli tramite socket al processo di cui sopra

In alternativa potresti semplicemente creare più log file e periodicamente lanciare un programma che li fonde ottenendo un unico log file.

Offline Snake Plissken

  • python unicellularis
  • *
  • Post: 34
  • Punti reputazione: 0
    • Mostra profilo
Re: Modulo LOGGING - utilizzo in rete
« Risposta #3 il: Luglio 22, 2011, 13:42 »
...
In alternativa potresti semplicemente creare più log file e periodicamente lanciare un programma che li fonde ottenendo un unico log file.
Intendi dire un log file per ogni utente da poi fondere insieme? Potrebbe essere una soluzione, però perdo la sequenza temparale.

Offline riko

  • python deus
  • *
  • moderatore
  • Post: 7.453
  • Punti reputazione: 12
    • Mostra profilo
    • RiK0 Tech Temple
Re: Modulo LOGGING - utilizzo in rete
« Risposta #4 il: Luglio 22, 2011, 16:57 »
...
In alternativa potresti semplicemente creare più log file e periodicamente lanciare un programma che li fonde ottenendo un unico log file.
Intendi dire un log file per ogni utente da poi fondere insieme? Potrebbe essere una soluzione, però perdo la sequenza temparale.

 I log potrebbero includere il tempo. ;)

Offline Nextage

  • python unicellularis
  • *
  • Post: 4
  • Punti reputazione: 0
    • Mostra profilo
Re:Modulo LOGGING - utilizzo in rete
« Risposta #5 il: Giugno 19, 2019, 13:13 »
Sono nuovo alla programmazione, come dovrebbe essere strutturato un programma che fonde i file?

Offline nuzzopippo

  • python habilis
  • **
  • Post: 56
  • Punti reputazione: 0
    • Mostra profilo
Re:Modulo LOGGING - utilizzo in rete
« Risposta #6 il: Giugno 20, 2019, 10:05 »
Sono nuovo alla programmazione, come dovrebbe essere strutturato un programma che fonde i file?

Ciao @Nextage, bruttissima idea "riaprire" un post di 8 anni fa, la tecnologia cambia in tempi mooolto più brevi, non credi sia meglio porre una Tua specifica domanda ad un Tuo specifico problema?

La "fusione" di files potrebbe dipendere dalle condizioni dei files.
Provo, comunque, a risponderti in maniera generica su di una ipotesi semplice : supponiamo di avere un insieme di tre file di logs con righe di log che iniziano con dati "temporali" (l'indicazione di @riko), come questi :

# file 1
2019-06-20T09:23:08.065568 : Avvio di mypyd1
2019-06-20T09:24:08.125763 : Variante 1 - eseguo istruzione 1
2019-06-20T09:25:08.137456 : Variante 1 - eseguo istruzione 2
2019-06-20T09:26:08.187182 : Variante 1 - eseguo istruzione 3
2019-06-20T09:27:08.247503 : Variante 1 - eseguo istruzione 4
2019-06-20T09:28:08.270459 : Variante 1 - eseguo istruzione 5

# File 2
2019-06-20T09:23:42.371260 : Avvio di mypyd2
2019-06-20T09:24:42.410702 : Variante 2 - eseguo istruzione 1
2019-06-20T09:25:42.470946 : Variante 2 - eseguo istruzione 2
2019-06-20T09:26:42.474092 : Variante 2 - eseguo istruzione 3
2019-06-20T09:27:42.479148 : Variante 2 - eseguo istruzione 4
2019-06-20T09:28:42.539483 : Variante 2 - eseguo istruzione 5

#File 3
2019-06-20T09:23:48.130851 : Avvio di mypyd3
2019-06-20T09:24:48.184124 : Variante 3 - eseguo istruzione 1
2019-06-20T09:25:48.206591 : Variante 3 - eseguo istruzione 2
2019-06-20T09:26:48.246429 : Variante 3 - eseguo istruzione 3
2019-06-20T09:27:48.306743 : Variante 3 - eseguo istruzione 4
2019-06-20T09:28:48.363951 : Variante 3 - eseguo istruzione 5


e che i tre file risiedano in una sotto-direttrice "logs" di quella che contiene il programma che deve fonderli, potresti farlo facilmente in questo modo :

#!/usr/bin/python3
# -*- coding : utf-8 -*-

import os

sumlogs = []
for log_file in os.listdir('logs'):
    f = open('logs/' + log_file, 'r')
    logtmp = f.read().splitlines()
    sumlogs += logtmp
    f.close()

sumlogs.sort()
f = open('totalgos', 'w')
for riga in sumlogs:
    f.write(riga + '\n')
f.close()

... ovviamente le cose potrebbero essere molto più complicate, se il contesto fosse diverso ;)

[Edit] Corretti gli import, avevo "ereditato" quelli di un modulo utilizzato per estrarre l'esempio.
« Ultima modifica: Giugno 20, 2019, 10:11 da nuzzopippo »