Ausgabe des Server-Logs in Odoo

Dieser Artikel beschreibt, wie man mit Hilfe der Log-Mechanik von Odoo, Log-Nachrichten in die Tabelle "ir.logging" schreiben und diese schlussendlich sogar mit dem Open Source ERP System Odoo im Backend betrachten kann.


Anpassung in der Config-Datei:

log_db = dbname


VORSICHT!

Wenn Ihr die Datenbank ersetzen wollte, muss dieser Eintrag deaktiviert werden, sonst hängt der Server in der Luft.


In der .conf-Datei muss dieser zusätzliche Eintrag getätigt werden. Dies erlaubt Odoo die Log-Nachrichten in die dafür vorgesehene "ir.logging" Tabelle zu schreiben. Hier werden alle vom Standard Odoo erzeugten Log-Nachrichten nun hinterlegt (Warning, Error, Critical).


Anpassung im Code um zusätzliche Informationen ausgeben zu können:

import logging
 
 

_logger.warning('Hier kommt meine Ausgabe hinein')

Durch den zuvor aufgeführten Aufruf, wird eine Warning simuliert mit Hilfe dieser man eine Ausgabe in die "ir.logging" Tabelle schreiben kann, welche z.B. einem print-Statement in der Konsole gleicht.


Die Tabelle "ir.logging" kann man nun auch wie oben bereits erwähnt im Backend näher betrachten (siehe Abbildung). Hierfür muss nach Einstellungen → Datenbankstruktur → Protokollierung navigiert werden.

Durch den Vorteil die Log-Nachrichten nun im Backend näher betrachten zu können, erlaubt es uns auf dem Live-System bereits schon einen Überblick zu haben, warum ein Fehler auftritt. Bei Fehlern, welche nur auf dem Live-System auftreten (und nicht lokal) ist diese Ausgabe von Log-Nachrichten, welche der Konsole gleichen nicht zu ersetzen.

Zusammenfassung:

Dieser Artikel hat die Möglichkeit erläutert, Standard Log-Nachrichten des Odoo Systems oder auch speziell erzeugte Log-Nachrichten zur Fehlerbehebung in die Tabelle "ir.logging" zu schreiben, um diese im Backend näher zu untersuchen.


Erweiterung der Funktionalität im Modul eq_office365

Damit wir im Modul eq_office365 wichtige Infos besser protokollieren können, wurde neue Hilfsfunktion _create_odoo_log() implementiert.

Die Funktion sieht so aus:
 

def _create_odoo_log(self, cr, name, func, path, message):
 """
 Erstellt Logeintrag direkt im Odoo
 @cr: Kursor
 @message: Logeintrag mit allen Daten
 """
 
 logger_vals = {
 'name' : name,
 'func': func,
 'path': path,
 'line': '/',
 'type': 'server',
 'level': 'INFO',
 'message': message 
 }
 logging_pool = self.pool.get('ir.logging')
 logging_pool.create(cr,SUPERUSER_ID,logger_vals)

und kann ausgeführt werden:

# prepare adn create itern log data
 message = self._extend_message(json_payload, "Username", username)
 self._create_odoo_log(cr, "JSON PAYLOAD - Contact", "PATCH", "eq_office365_equitania.eq_office365_contacts", message)


Erweiterung der Funktionalität im Modul eq_office365 für Cronjobs

Damit wir optional auch für Conjobs die Infos protokollieren können, wurde auch hier die Funktionalität erweitert.

Man kann bei dem Cronjob "Office 365 Sync Contacts" einen Parameter setzen, der das Protokollieren aktiviert.

Aufruf der Funktion

def cron_sync_office365_contacts(self,cr, uid, args=None, context=None):  
   # check if extra argument for cronjob is given
   cron_log_active = self._check_if_cron_log_is_active(args)


   # prepare adn create itern log data     
   if cron_log_active:
	  message = self._extend_message(json_payload, "Username", username)
      self._create_odoo_log(cr, "[CRONJOB] JSON PAYLOAD - Contact", "POST", "eq_office365_equitania.cron_sync_office365_contacts", message)


Hier ist ein Beispiel


Verwandte Artikel