logging - modul

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Muntliger
User
Beiträge: 40
Registriert: Montag 19. November 2018, 09:09

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 :)
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Benutzeravatar
Muntliger
User
Beiträge: 40
Registriert: Montag 19. November 2018, 09:09

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.
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Und wie viele Partitionen mit Größe sind auf der SD?
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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?
Benutzeravatar
ThomasL
User
Beiträge: 1372
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

__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.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Benutzeravatar
Muntliger
User
Beiträge: 40
Registriert: Montag 19. November 2018, 09:09

das werde ich gleich heute abend testen.
Benutzeravatar
Muntliger
User
Beiträge: 40
Registriert: Montag 19. November 2018, 09:09

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.
Benutzeravatar
Muntliger
User
Beiträge: 40
Registriert: Montag 19. November 2018, 09:09

Hab nun die SD Karte neu Formatiert auf ext4 Filesystem - sieht aus als funktioniert es jetzt normal. :shock:
Antworten