Announcement

Collapse
No announcement yet.

log4j in struts

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • log4j in struts

    hallo zusammen,

    mal ne frage, kann mir jemand ein tut empfehlen wo ich dahinter steige wie ich log4j richtig in ner webapp mit struts einsetze? oder mal ne kurze anleitung geben? ich wäre sehr dankbar.

  • #2
    Hallo Jan,

    Zunächst mußt Du log4j konfigurieren. Dazu reicht es, log4j.jar in den classpath aufzunehmen (falls der Server es nicht sowieso schon verwendet). Beim Tomcat kann man es z.b. nach common/lib kopieren. Dann sollte noch eine log4j.properties Datei in den classpath, bei einer webapp kann man die direkt in WEB-INF/classes packen. Was es dann alles für Konfigurationsmöglichkeiten gibt, steht z.b. hier http://logging.apache.org/log4j/docs/manual.html <br>

    Anbei noch ein kleines Beispiel für den Tomcat. Die Ausgabe erfolgt auf der Konsole und in eine Datei logs/mylog.txt. Die eigenen Klassen (package de.test und tiefer) loggen alles ab INFO-Level, alle anderen Klassen ab ERROR-Level. In der Datei landen nur ERRORs.

    <pre>
    log4j.rootLogger=error, stdout, file
    log4j.logger.de.test=info
    log4j.appender.stdout=org.apache.log4j.ConsoleAppe nder
    log4j.appender.stdout.layout=org.apache.log4j.Patt ernLayout
    log4j.appender.stdout.layout.ConversionPattern=%5p %F - %m%n

    log4j.appender.file=org.apache.log4j.RollingFileAp pender
    log4j.appender.file.File=${catalina.base}/logs/mylog.txt
    log4j.appender.file.Threshold=error

    log4j.appender.file.MaxFileSize=100KB
    log4j.appender.file.MaxBackupIndex=1
    log4j.appender.file.layout=org.apache.log4j.Patter nLayout
    log4j.appender.file.layout.ConversionPattern=%5p [%d] %C %M() - %m%n
    </pre>

    Im Code kann man dann

    <pre>
    Logger logger = Logger.getLogger(MyClass.class);
    logger.info("TestInfoMessage");
    </pre>

    verwenden. Besser ist es ev., das commons-logging API zu benutzen (tut Struts auch). commons-logging delegiert auf Log4J, man hat aber den Vorteil das man es jederzeit wieder austauschen kann.

    <pre>
    Log log = LogFactory.getLog(MyClass.class);
    log.error("TestErrorMessage");
    </pre>

    Gruß,

    Alwi

    Comment


    • #3
      hallo alwin,

      super. auf dich ist ja echt verlass. die log4j beispiele habe ich gemacht, deine anleitung probiere ich aus. eine frage noch: wie kann ich das einstellen das er eine datei mit allen statements füttert (incl. errors) und eine nur mit errors? also ne app.log und ne app_error.log?

      dank für hilfe !

      Comment


      • #4
        Hallo Jan,

        Man kann z.b. zwei FileAppender mit unterschiedlichem Threshold definieren:

        <pre>
        log4j.rootLogger=error, stdout, file1, file2
        log4j.logger.de.test=debug
        log4j.appender.stdout=org.apache.log4j.ConsoleAppe nder
        log4j.appender.stdout.layout=org.apache.log4j.Patt ernLayout
        log4j.appender.stdout.layout.ConversionPattern=%5p %F - %m%n

        log4j.appender.file1=org.apache.log4j.RollingFileA ppender
        log4j.appender.file1.File=${catalina.base}/logs/app.log
        log4j.appender.file1.Threshold=debug

        log4j.appender.file1.MaxFileSize=100KB
        log4j.appender.file1.MaxBackupIndex=1
        log4j.appender.file1.layout=org.apache.log4j.Patte rnLayout
        log4j.appender.file1.layout.ConversionPattern=%5p [%d] %C %M() - %m%n

        log4j.appender.file2=org.apache.log4j.RollingFileA ppender
        log4j.appender.file2.File=${catalina.base}/logs/app_error.log
        log4j.appender.file2.Threshold=error

        log4j.appender.file2.MaxFileSize=100KB
        log4j.appender.file2.MaxBackupIndex=1
        log4j.appender.file2.layout=org.apache.log4j.Patte rnLayout
        log4j.appender.file2.layout.ConversionPattern=%5p [%d] %C %M() - %m%n
        </pre>

        Gruß,

        Alwi

        Comment


        • #5
          hallo zusammen,

          ich bekomme es nicht hin!!

          ich habe die log4j.jar in das common/lib verzeichnis kopiert und zusätzlich nochmals in das lib verzeichnis der webapp. im web-inf pfad hab ich die angeben config in eine log4j.properties datei eingefühgt und beide log aufrufe getestet. dennoch kommt immer beim start up das er keinen appender gefunden hat und erstellt keine log datei. woran liegt es???

          bin ratlos. bitte einen tip. danke

          Comment


          • #6
            Hallo Jan,

            Steht die log4j.properties Datei im classpath? Sie muß nach WEB-INF/classes oder in eine jar-Datei im WEB-INF/lib.

            Gruß,

            Alwi

            Comment


            • #7
              hallo Alwin,

              sie liegt im web-inf pfad direkt. also im classpath. denk ich.

              gruß ja

              Comment


              • #8
                hallo nochmal,

                die "fehlermeldung" sieht so aus:

                <pre>
                27.03.2005 21:56:51 org.apache.catalina.core.StandardContext reload
                INFO: Reloading this Context has started
                log4j:WARN No appenders could be found for logger (org.apache.struts.util.PropertyMessageResources).
                log4j:WARN Please initialize the log4j system properly.
                </pre>

                das ganze sagt mir nicht viel.

                gruß jan

                Comment


                • #9
                  Hallo Jan,

                  Direkt unter WEB-INF ist *nicht* im classpath und kann daher vom ClassLoader nicht gefunden werden. Die anderen Dateien direkt unter WEB-INF (z.b. struts-config.xml) werden normalerweise über ServletContext.getResourceAsStream geladen, es ist kein ClassLoader involviert. Log4J benutzt aber den ClassLoader, daher muß die Datei in WEB-INF/classes oder einer jar-Datei stehen.

                  Gruß,

                  Alwi

                  Comment


                  • #10
                    hallo alwin,

                    wieder was gelernt!! also ich habe log4j dazu bekommen mir was waegzuschreiben, allerdings landen die statt im logsordner vom tomcat im bin verzeichnis von netbeans. in der log4j doku geben sie immer nur den dateinamen an, liegt das jetzt an netbeans der da was durcheinanderhaut? ich gebe die datei so an:

                    <pre>
                    log4j.appender.file.File=logs/logTest.log
                    </pre>

                    raus kommt dann logslogTest.log. also da hab ich doch mal wieder was falsch gemacht, wa? schönen abend noch allesamt

                    Comment


                    • #11
                      Hallo Jan,

                      Wenn man den Pfad relativ angibt geht er halt vom aktuellen Verzeichnis aus. Das hängt natürlich von der Umgebung ab. Mit ${catalina.base}/logs/app_error.log müsste er es doch eigentlich ins Tomcat-log schreiben. Natürlich muß das catalina.base property vorhanden sein, das ist beim Tomcat aber normalerweise der Fall.

                      Gruß,

                      Alwi

                      Comment


                      • #12
                        hallo alwin,

                        ich bin es mal, wieder. also dank deiner hilfe tut jetzt fast alles wunderbar. er logt und logt. allerdings wenn die angegebene 100kb grenze für eine logdatei erreicht ist, dann erstellt er kein backup, sondern löscht die alte datei und beginnt wieder von vorn. ich habe aber gesagt das er 2 backup files behalten soll. wo kann ich da nachschauen was schief geht

                        Comment


                        • #13
                          Hi Jan,

                          Mit

                          <pre>
                          log4j.appender.file1.MaxBackupIndex=10
                          log4j.appender.file2.MaxBackupIndex=10
                          </pre>

                          kann man das einstellen. Das müsste eigentlich schon klappen.

                          Gruß,

                          Alwi

                          Comment


                          • #14
                            hallo alwin,

                            MaxBackupIndex gibt doch an wieviel Backups er behält, oder? aber er erstellt nicht eine einzige. ???

                            gruß ja

                            Comment


                            • #15
                              Hi Jan,

                              Stimmt. Wenn man das auf 0 setzt, erstellt er überhaupt kein Backup. Macht man es größer 0 setzt behält er soviel Backups (und fängt überhaupt erst an, welche zu erstellen). Einen anderen Schalter gibt es AFAIK nicht.

                              Gruß,

                              Alwi

                              Comment

                              Working...
                              X