Avatar billede eky Nybegynder
27. oktober 2009 - 10:08 Der er 5 kommentarer og
1 løsning

Undgå debug msg i konsollen med Log4J

Hvordan undgår jeg at debug meddelelser skrives i konsollen. Jeg vil kun ha' dem ud i en logfil, og INFO meddelelser på konsollen.

Nu skrives debug meddelelser i min logfil, men både INFO og DEBUG meddelelser på konsollen.

Min main class
package dk.min.test;

//Import log4j classes.
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;

public class MyLog4jClass {

    static Logger logger = Logger.getLogger(MyLog4jClass.class);

    public static void main(String[] args) {

        // Set up a simple configuration that logs on the console.
        BasicConfigurator.configure();

        logger.info("Entering application.");

        SkrivDebug skrivDebug = new SkrivDebug();
        skrivDebug.doIt();
       
        SkrivInfo skrivInfo = new SkrivInfo();
        skrivInfo.doIt();
       
        logger.info("Exiting application.");

    }
}

En klasse
package dk.min.test;

import org.apache.log4j.Logger;

public class SkrivDebug {
      static Logger logger = Logger.getLogger(SkrivDebug.class);
     
      public void doIt() {
        logger.debug("DEBUG meddelelse!");
      }
    }

log4j.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>

    <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ISO8601} %t %m%n" />
        </layout>
    </appender>
   
    <appender name="RollingFileAppender" class="org.apache.log4j.RollingFileAppender">
        <param name="file" value="MinLog.log"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ISO8601} %t %m%n" />
        </layout>
    </appender>

    <logger name="dk.min.test.SkrivDebug">
        <level value="DEBUG" />
        <appender-ref ref="RollingFileAppender"/>
    </logger>

    <root>
        <priority value="INFO" />
        <appender-ref ref="ConsoleAppender"/>
    </root>

</log4j:configuration>
Avatar billede odsgaard Praktikant
27. oktober 2009 - 12:56 #1
Du kan indsætte et filter i din appender:

<appender name="ConsoleAppender"
class="org.apache.log4j.ConsoleAppender">
  <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="%d{ISO8601} %t %m%n" />
  </layout>
  <filter class="org.apache.log4j.varia.LevelRangeFilter">
    <param name="LevelMin" value="INFO" />
    <param name="LevelMax" value="INFO" />
  </filter>
</appender>
Avatar billede eky Nybegynder
27. oktober 2009 - 14:17 #2
Nu har jeg prøvet at sætte filter på (copy/paste fra dit forslag), men alle meddelelser kommer stadig ud på konsollen.

Her ses konsollen
0 [main] INFO dk.min.test.MyLog4jClass  - Entering application.
0 [main] DEBUG dk.min.test.SkrivDebug  - DEBUG meddelelse!
2009-10-27 14:14:02,278 main  INFO meddelelse!
0 [main] INFO dk.min.test.SkrivInfo  -  INFO meddelelse!
2009-10-27 14:14:02,278 main Exiting application.
0 [main] INFO dk.min.test.MyLog4jClass  - Exiting application.
Avatar billede eky Nybegynder
27. oktober 2009 - 14:53 #3
Måske bliver jeg snydt.

Hvad er forskellen på de linier, der starter med "0" og de der starter med dato-tid?

Det er som om, at filteret kun har indflydelse på de der starter med dato-tid. De andre linier kommer altid ud.

Bemærk første linie i mit output manglede. Den korrekte konsolvisning ses her:
2009-10-27 14:14:02,278 main Entering application.
0 [main] INFO dk.min.test.MyLog4jClass  - Entering application.
0 [main] DEBUG dk.min.test.SkrivDebug  - DEBUG meddelelse!
2009-10-27 14:14:02,278 main  INFO meddelelse!
0 [main] INFO dk.min.test.SkrivInfo  -  INFO meddelelse!
2009-10-27 14:14:02,278 main Exiting application.
0 [main] INFO dk.min.test.MyLog4jClass  - Exiting application.
Avatar billede odsgaard Praktikant
27. oktober 2009 - 19:32 #4
Prøv at udkommentere denne linie:

  BasicConfigurator.configure();

Jeg tror det er den der laver de linier der starter med 0
Avatar billede eky Nybegynder
28. oktober 2009 - 08:52 #5
Perfekt, det var lige det der skulle til. Mange tak for hjælpen.
Avatar billede odsgaard Praktikant
28. oktober 2009 - 16:40 #6
Velbekom :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester