Ankündigung

Einklappen
Keine Ankündigung bisher.

Logging per Rule?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Logging per Rule?

    hi zusammen,

    kurze frage:
    kann man in openhab innerhalb einer rule ein Logfile erstellen bzw. ein benutzerdefiniertes logfile schreiben?
    oder muss ich den umweg über ein item und der logging.persist gehen? ich konnte bisher keine anderen infos finden.

    vielen dank!

    #2
    Viel einfacher : es gibt Actions dafür., Ich nutze in meinen Regeln gern logInfo um über bestimmte Ereignisse Bescheid zu geben. Dank der Log4J Implementation kannst Du für den bestimmten Logger auch einen eigenen Logfile konfigurieren oder aber den Standardfile mitbenutzen.

    Gerade beim Entwickeln einer Regel ist das sehr angenehm.

    Ein paar Beispiele siehst Du hier (in der Regel unter "Create a timer for sunset" beispielsweise).

    Kommentar


      #3
      danke @Reddick

      die actions kenne ich natürlich und auch die logInfo usw. Actions. aber was ich eben nicht weiß/wusste ist, wie man eigene Logfiles schreiben kann.

      ich möchte mir bestimmte aktionen einfach in einem dafür eigenen logfile merken, die ich dann auch danach wieder einfach lesen kann. viele sachen mache ich schon über die logging.persist mit den entsprechenden items dazu. manche sachen ergeben sich aber in der jeweiligen regel - also kein klassisches info/debug-log, sondern ein log explizit für den gedachten inhalt (z.b. logfile mit den diversen türklingelaktionen oder wann wurde der fingerprint betätigt usw.). das möchte ich nicht in ein allgemein gültiges logfile schreiben, sondern in explizit dafür vorgesehene.

      du schreibst:
      Dank der Log4J Implementation kannst Du für den bestimmten Logger auch einen eigenen Logfile konfigurieren
      wenn ich es also richtig verstehe, muss ich lediglich in der logback.xml mir ein file definieren, welches ich danach mit den vordefinierten log-actions ansprechen kann, oder?

      ich fasse es mal für die nachwelt zusammen.

      beispiel:
      Code:
      	<appender name="FINGERPRINT" class="ch.qos.logback.core.rolling.RollingFileAppender">
      	   <file>logs/FingerPrint/fingerprint.log</file>
      	   <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      	      <!-- weekly rollover and archiving -->
      	      <fileNamePattern>logs/FingerPrint/fingerprint-%d{yyyy-ww}.log.zip</fileNamePattern>
      	      <!-- keep 5 days' worth of history -->
      	      <maxHistory>5</maxHistory>
      	   </rollingPolicy>
      	   <encoder>
      	     <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{30}[:%line]- %msg%n%ex{5}</pattern>
      	   </encoder>
      	</appender>
      und dann in der rule wie folgt ansprechbar:
      Code:
      logInfo("FINGERPRINT", "Haustür wurde über Fingerprint geöffnet.")
      richtig?

      ich probiere es gleich mal aus :-)

      danke für den hinweis/denkanstoß!

      Kommentar


        #4
        Das ist es ... fast ;-). Du brauchst pro Ausgabe (also pro zu schreibenden File) einen Appender. Es gibt in Log4J verschiedenste Appender für das Loggen in Files aber auch andere Ziele.

        Der Appender ist also dann schonmal richtig. Nun mußt Du aber noch definieren welche Ausgaben dahin geschrieben werden sollen. Das machst Du mit einem Logger-Eintrag:

        Code:
        	<logger name="FINGERPRINT" level="INFO" additivity="false">
        		<appender-ref ref="FINGERPRINT" />
        	</logger>
        Wichtig ist hier der Name. Dieser mußt mit dem Logger-Parameter im logInfo-Aufruf übereinstimmen damit dieser Logger die Zeile aufnimmt und an den konfiguierten Appender übergibt welcher dann die Zeile schreibt. Ist ein wenig kompliziert aber wunderbar flexibel.

        Nebenbei gibst Du auch an welches Loglevel mindestens erreicht werden soll. Bei der Angabe von "INFO" werden also alle logInfo-Aufrufe für diesen Logger geschrieben. Zudem würden aber auch etwaige logWarn- und logError-Aufrufe geschrieben - jedoch logDebug verschluckt. Damit kannst Du steuern wie geschwätzig Deine Applikation sein soll.

        Die Standard-Konfiguration von openHAB kommt mit drei Appendern : einer für die Ausgabe auf die Konsole, ein andere in ein rollendes File und ein weiterer für das Loggen des Busevents. Letzterer ist ein gutes Beispiel für Deinen Wunsch in ein eigenes File zu loggen.

        Kommentar


          #5
          funktioniert leider noch nicht ganz.

          ich habe das ganze jetzt mal mit einem TEST-logger aufgebaut und schreibe jede min. einen eintrag. das funktioniert soweit es in das openhab.log einläuft.

          deinen hinweis hatte ich im vorfeld schon noch selbst entdeckt. was da nicht funktioniert ist:
          logger name="TEST"

          damit werden alle einträge dennoch in die openhab.log geschrieben.

          ich habe das ganze geändert auf:
          logger name = "org.openhab.model.script.TEST"

          damit werden jetzt zwar die logeinträge nicht mehr in das openhab.log geschrieben, allerdings auch nicht in das in der logback.xml definierte file (/logs/Meldearchive/Test.log).

          hier nochmal mein aktueller test-aufbau:
          Code:
          	<appender name="TEST" class="ch.qos.logback.core.rolling.RollingFileAppender">
          	   <file>logs/Meldearchive/Test.log</file>
          	   <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
          	      <!-- yearly rollover and archiving -->
          	      <fileNamePattern>logs/Meldearchive/Test-%d{yyyy}.log.zip</fileNamePattern>
          	   </rollingPolicy>
          	   <encoder>
          	     <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{30}[:%line]- %msg%n%ex{5}</pattern>
          	   </encoder>
          	</appender>
          
          	<logger name="org.openhab.model.script.TEST" level="INFO" additivity="false">
          	   <appender-ref ref="TEST" />
          	</logger>
          Code:
          logInfo("TEST","Testeintrag")
          fällt dir noch irgendwas auf, was nicht passt?

          vielen dank!

          Kommentar


            #6
            Japp, im logInfo-Aufruf benutzt Du den Namen "TEST" als logger (logInfo("TEST","Testeintrag")). Dann muß der Logger in der Konfigurationsdatei auch so heißen.

            Am einfachsten wäre es also wenn Du den Namen Deines logInfo-Eintrages auch auf "org.openhab.model.script.TEST" änderst damit er vom Logger in der Konfigurationsdatei aufgenommen werden kann. Dann sollte es gehen:

            Code:
            logInfo("org.openhab.model.script.TEST","Testeintrag")

            Kommentar


              #7
              nee das funktioniert leider nicht... (wird wieder ins openhab.log geschrieben - dieses mal mit: o.o.m.s.o.o.model.script.TEST statt org.openhab.model.script.TEST

              ich denke logInfo("TEST","Testeintrag") ist schon richtig. dadurch wird es zumindest nicht mehr in die openhab.log geschrieben. aber eben leider auch nirgendwo anders hin.

              habe es gerade auch nochmal versucht ohne unterordner (Meldearchive) direkt ins logs-verzeichnis zu schreiben - selbes ergebnis. es wird garnichts geschrieben.

              jetzt bin ich langsam mit meinem latein am ende...

              Kommentar


                #8
                Hm, ich sitze leider noch im Büro (und mein Arbeitgeber gestattet mir keine openHAB-Installation auf den DWH-Server ;-) ). Wenn ich nachher nach Hause komme bastel ich mal ein Beispiel da auch ich Logausgaben in den Rules habe.

                Dass die Ausgaben nun in die normale openHAB.log geschrieben werden liegt an dem Standard-Logger:
                Code:
                <logger name="org.openhab" level="INFO"/>
                Der ist normalerweise in der Distribution so mitgeliefert. Dies bedeutet dass alle Logger welche mit org.openhab beginnen und mindestens INFO-level aufweisen geloggt werden. Da keine Appender referenziert werden werden diese vom root-logger geerbt:
                Code:
                <root level="WARN">
                		<appender-ref ref="FILE" />
                		<appender-ref ref="STDOUT" />
                	</root>
                Und daher wandern Deine Einträge auch in den FILE. Zusätzlich sollten sie aber auch noch durch den neuen Appender in Deinen File wandern.

                Also wie gesagt : ich versuch's nachher mal zu hause und schau ob ich da irgendwas übersehen habe. Ist ein wenig Fummelei und das geht am besten wenn man es ausprobieren kann.

                Kommentar


                  #9
                  super - danke für deine unterstützung!

                  Kommentar


                    #10
                    so, hab jetzt nochmal ein wenig rumprobiert. so geht´s:

                    Code:
                    	<appender name="TEST" class="ch.qos.logback.core.rolling.RollingFileAppender">
                    	   <file>logs/Meldearchiv/Test.log</file>
                    	   <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                    	      <!-- yearly rollover and archiving -->
                    	      <fileNamePattern>logs/Meldearchiv/Test-%d{yyyy-ww}.log.zip</fileNamePattern>
                    	      <!-- keep 10 weeks worth of history -->
                    	      <maxHistory>10</maxHistory>
                    	   </rollingPolicy>
                    	   <encoder>
                    	     <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{30}[:%line]- %msg%n%ex{5}</pattern>
                    	   </encoder>
                    	</appender>
                    
                    	<logger name="org.openhab.model.script.TEST" level="INFO" additivity="false">
                    	   <appender-ref ref="TEST" />
                    	</logger>
                    es lag an folgender zeile:
                    Code:
                    <fileNamePattern>logs/Meldearchiv/Test-%d{yyyy-ww}.log.zip</fileNamePattern>
                    ich wollte das ganze eigentlich nur jährlich einem rollover unterziehen, daher habe ich einfach aus dem filepattern statt yyyy-ww ein yyyy gemacht. dann hat es nicht mehr funktioniert. mit yyyy-ww funktioniert es!?

                    wie kann ich das ganze denn jährlich einstellen?

                    Kommentar


                      #11
                      yearly scheint es wohl nicht zu geben.

                      es funktioniert:
                      • yyyy-MM-dd --> daily
                      • yyyy-ww --> weekly
                      • yyyy-MM --> monthly


                      yyyy funktioniert nicht (zumindest nicht auf 1.5.1).

                      Kommentar


                        #12
                        Ah, schön zu hören dass es nun soweit funktioniert. Ein jährliches Rollen des Files scheint wohl wirklich nicht zu gehen. Die Doku besagt auch:

                        Code:
                        It defines a rollover policy based on time, for example by day or by month.
                        Zum Jahr finde ich dort nichts. Du könntest monatlich rollen lassen und 12 Archive behalten. Dann hättest Du immer ein Jahr vorrätig. Ich bezweifle stark dass Du noch weiter in die Vergangenheit schauen möchtest.

                        Kommentar


                          #13
                          so mache ich es jetzt auch - notfalls kann man sich ja >12 monate behalten

                          also danke nochmal für deine info und unterstützung.

                          Kommentar


                            #14
                            Hallo Leute, ich sitze auch gerade an meinen ersten Logging-Versuchen. Ich habe zum Test mal den Code per copypaste in meine logback.xml und meine rules datei geschrieben. Doch leider werden die Log-Dateien nicht erstellt. Jemand eine Idee, woran es liegen könnte? Oder muss ich an anderer Stelle noch etwas machen?

                            EDIT:

                            Jetzt geht es. Ich musste openhab neu starten, damit das Logging startet.

                            Gibt es zudem noch eine Möglichkeit, dass für jeden neuen Eintrag in die Log-Datei, eine neue Zeile begonnen wird?
                            Zuletzt geändert von Tt49; 03.08.2016, 08:48.

                            Kommentar


                              #15
                              Zitat von Tt49 Beitrag anzeigen
                              Gibt es zudem noch eine Möglichkeit, dass für jeden neuen Eintrag in die Log-Datei, eine neue Zeile begonnen wird?
                              Das ist eigentlich default, wenn es bei dir nicht so ist hast du vielleicht einen copy/paste Fehler ...

                              Kommentar

                              Lädt...
                              X