Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix logging conversion asc/utf #1932

Merged
merged 1 commit into from Jan 17, 2022
Merged

fix logging conversion asc/utf #1932

merged 1 commit into from Jan 17, 2022

Conversation

benderl
Copy link
Collaborator

@benderl benderl commented Jan 17, 2022

This should resolve exceptions when log messages contain non ASCII characters.

@benderl benderl merged commit 10c6e52 into snaptec:master Jan 17, 2022
@yankee42
Copy link
Contributor

New in version 3.3: Support for the unicode legacy literal (u'value') was reintroduced to simplify the maintenance of dual Python 2.x and 3.x codebases. See PEP 414 for more information.

Quelle

In der PEP 414 stehen noch ein paar weitere Details. Kurzfassung: Das "u" wird in Python 3 einfach ignoriert. Die Syntax existiert nur zu Kompatibilitätszwecken zu Python 2. String in Python 3 sind immer unicode. Dieser PR löst damit das Problem sicherlich nicht.

@benderl
Copy link
Collaborator Author

benderl commented Jan 17, 2022

Ok, hast Du eine andere Idee?

@yankee42
Copy link
Contributor

Kontext

Zunächst mal etwas Kontext: Das ganze kam (zumindest für mich) mit diesem Forenpost auf. Dort wurde folgender Fehler für einen HTTP-Counter aus dem Log gefischt:

Traceback (most recent call last):
File "/usr/lib/python3.5/logging/__init__.py", line 983, in emit
stream.write(msg)
UnicodeEncodeError: 'ascii' codec can't encode character '\xe4' in position 56: ordinal not in range(128)

(meine Änderung: Zeilenreihenfolge korrigiert).

Das ganze geht durch mehrere Schichten aber was letztlich an Code dort steht ist:

sys.stdout.write("ä")

Und das geht nicht. Warum?

Weiter im Text

Meine naheliegendste Theorie ist, dass in der Systemkonfiguration was anders eingestellt ist. Siehe auch https://stackoverflow.com/q/492483 und https://drj11.wordpress.com/2007/05/14/python-how-is-sysstdoutencoding-chosen/

Allerdings: Bei mir funktioniert das alles richtig.

Bzw. was ich noch nicht gemacht habe ist tatsächlich ein Original HTTP-Modul konfiguriert, weil ich meine bestehenden Module in der Konfig nicht ersetzen möchte. Allerdings habe ich das HTTP-Modul wo das Problem im Zähler auftaucht testweise kopiert, so gekürzt, dass die ganzen HTTP-calls und das anwenden der errungenen Werte wegfallen und dann habe ich das Modul manuell über den legacy-run-server aufgerufen. Ich bekomme dann ganz normal und voll erfolgreich die korrekte Logausgabe mit ä in Zähler ohne, dass das stört. Und ja, ich habe es auch auf meinem Original Raspi in meiner oWB getestet. Für mich bisher nicht reproduzierbar.

Und so anders kann mein System doch garnicht sein, als das von anderen Leuten, die auch ein Original-oWB-Installation haben?! Oder hat sich irgendwas mal geändert bei neueren oder älteren Auslieferungen? Irgend ein Update-Script was in irgend einer Situation mal lief?

@benderl
Copy link
Collaborator Author

benderl commented Jan 18, 2022

Nach diesem PR kommt in meinem Log eine entsprechende Meldung ohne Fehler:

2022-01-18 08:37:33: PID: 26267: root: Komponente SonnenBatterie Zähler wurde erfolgreich auslesen.

Vorher hatte ich die selbe Fehlermeldung wie im Forum zum HTTP Modul beschrieben wurde.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants