Seite 1 von 1

logging - modul

Verfasst: Dienstag 4. Dezember 2018, 20:12
von Muntliger
Hallo,

bei meinem Script benutze ich das logging modul - welches auch wunderbar funktioniert.

Das Problem ist - die SD Karte auf welche die logs gespeichert werden - wird immer gefüllt.
Befehl: df -h wird bei /mnt/sd0 - 1,1GB angezeigt
Befehl: du sind es ca. 140MB

Wenn ich die SD Karte formatiere beginnat es auch wieder die Karte von vorne zu befüllen.

Meine Befürchtung liegt beim logging modul - da dies das einzige ist das auf die Karte schreibt.

Ich benötige ein Class um die Formatter Texte zu setzen:

Code: Alles auswählen

class ContextFilter(logging.Filter):
    def filter(self, record):
        # date
        record.softwareversion = data.softwareversion
        record.id = data.id
        record.channelnumber = channelnumber
        #type
        # value
        record.channeltype = ch_setup.get(ch, 'type')
        record.unit_act = ch_setup.get(ch, 'unit_act')
        record.unit_count = ch_setup.get(ch, 'unit_count')
        record.name1 = ch_setup.get(ch, 'name1')
        record.name2 = ch_setup.get(ch, 'name2')
        record.name3 = ch_setup.get(ch, 'name3')
        record.name4 = ch_setup.get(ch, 'name4')
        record.name5 = ch_setup.get(ch, 'name5')
        record.geo_lat = ch_setup.get(ch, 'geo_lat')
        record.geo_long = ch_setup.get(ch, 'geo_long')
        return True
Aufruf des Loggers:

Code: Alles auswählen

channel_logger_count = logging.getLogger('ch'+channelnumber+'_c')
channel_logger_count.addFilter(ContextFilter())
channel_logger_count.setLevel(logging.INFO)
formatter_count = logging.Formatter('%(asctime)s;%(softwareversion)s;%(id)s;%(channelnumber)s;s0dc;%(message)s;%(channeltype)s;%(unit_count)s;%(name1)s;%(name2)s;%(name3)s;%(name4)s;%(name5)s;%(geo_lat)s;%(geo_long)s')
logHandler_count = handlers.RotatingFileHandler('/mnt/sd0/logs/' + (ch) + '_c.log', maxBytes=5000000, backupCount=10)
logHandler_count.setFormatter(formatter_count)
logHandler_count.setLevel(logging.INFO)
channel_logger_count.addHandler(logHandler_count)
Muss hier noch eine Datei geschlossen werden?

Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt :)

Re: logging - modul

Verfasst: Dienstag 4. Dezember 2018, 22:43
von __deets__
Also 5MB pro logdatei mal 10 sind ja schon 50MB. Wieviel Kanäle hast du denn? Bei drei bist du ja schon bei deinen beobachtete 140MB.

Und da du die Dateien ja selbst anlegst (oder anlegen lässt), weißt du du, wo die sind, wie die heißen, und kannst feststellen, ob das die Bösewichte sind. Wir können das nicht. Wir haben ja deine Sd-Karte nicht.

Re: logging - modul

Verfasst: Mittwoch 5. Dezember 2018, 07:36
von Muntliger
Genau, die 140MB passen ja auch - wenn ich die Karte aber in einen PC stecke sind 1,1GB voll - obwohl nur 140MB Daten drauf liegen.
mit dem Befehl "df" wird auch 1,1GB (steigend) angezeigt.

Re: logging - modul

Verfasst: Mittwoch 5. Dezember 2018, 23:29
von darktrym
Und wie viele Partitionen mit Größe sind auf der SD?

Re: logging - modul

Verfasst: Donnerstag 6. Dezember 2018, 00:01
von __deets__
Muntliger hat geschrieben: Mittwoch 5. Dezember 2018, 07:36 Genau, die 140MB passen ja auch - wenn ich die Karte aber in einen PC stecke sind 1,1GB voll - obwohl nur 140MB Daten drauf liegen.
mit dem Befehl "df" wird auch 1,1GB (steigend) angezeigt.
Ich kann mir da nur vorstellen, das das FAT-Filesystem das du da denke ich mal einsetzt irgendwie solche Untersxidd provoziert. Wobei Faktor 8 schon extrem ist.
Was passiert denn mit du statt df?

Re: logging - modul

Verfasst: Donnerstag 6. Dezember 2018, 07:15
von ThomasL
__deets__ hat geschrieben: Donnerstag 6. Dezember 2018, 00:01Ich kann mir da nur vorstellen, das das FAT-Filesystem das du da denke ich mal einsetzt irgendwie solche Unterschied provoziert.
Könnte an der Formatierung liegen oder besser an der Größe der Zuordnungseinheiten /Blocksize, wenn da z.B. 64kB verwendet wurde,
so belegt jede Datei die nur 1 Byte Inhalt hat, auf dem Datenträger aber 64kB.
Der Faktor wäre also x64k,
Also schau mal unter WIndows cmd Befehl chkdsk X: (X=Laufwerksbuchstabe) nach.
Da stehen die Anzahl der Dateien und die Größe der Zuordnungseinheit.

Re: logging - modul

Verfasst: Donnerstag 6. Dezember 2018, 07:50
von Muntliger
das werde ich gleich heute abend testen.

Re: logging - modul

Verfasst: Donnerstag 6. Dezember 2018, 20:11
von Muntliger
Hallo, an der Blocksize liegt es nicht = 8192 Bytes.

Dies ergiebt nun z.B.
Größe = 238MB
Größe auf Datenträger = 391MB

Wenn ich aber in Windows die Eigenschaften anschaue
Belegter Speicher 1,47GB

echt schräg - keine ahnung wo ich noch suchen könnte.

Die SD Karte hat nur eine Partition.

Auf dem Linux Gerät läuft nur das Python Script und Elastic Filebeat.

Re: logging - modul

Verfasst: Sonntag 9. Dezember 2018, 20:24
von Muntliger
Hab nun die SD Karte neu Formatiert auf ext4 Filesystem - sieht aus als funktioniert es jetzt normal. :shock: