Java >> Java tutorial >  >> Tag >> Log4j

Brug systemegenskaber ELLER variabler i log4j

Se denne tråd

Det ser ud til, at du gjorde alt rigtigt. Jeg tror ikke der er nogen forskel på at sætte egenskaben inde i din hovedklasse med System.setProperty() og angive det via kommandolinjen, så længe det sker før den faktiske log4j initialisering.

Jeg tror, ​​dit problem er, at din logningsramme bliver indlæst før du angiver egenskaben. Jeg kan sige, at logningsrammerne (log4j) bliver konfigureret, når du kalder konfiguratoren. Ting som BasicConfigurator.configure() (i dit tilfælde dens xml-konfigurator).

Ellers vil det første forsøg på at bruge logningen forårsage besked som "log4j er ikke konfigureret korrekt".

Det virkelige spørgsmål er, om dit kodestykke med 'main' ikke er oversimplificeret.

Med dette i tankerne, et andet spørgsmål, som jeg er nødt til at stille - om du kører inde i en container, eller du kører en rigtig vaniljemetode og konfigurerer alt selv? Jeg spørger, fordi hvis du kører i container, er chancerne for, at container af sig selv på en eller anden måde konfigurerer sin logning, for eksempel vil JBoss gøre det. I dette tilfælde er der behov for mere undersøgelse.

Håber dette hjælper


Systemegenskaber kan bruges som ${user.home}, vælg påkrævet herfra http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html

eksempel:

<appender name="errorLog" class="com.qait.logger.IOPFileAppender">
    <param name="Threshold" value="ERROR" />
    <param name="File"
        value="${user.home}/Harvestors/IOP Error Logs/error.log" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d%-5p  [%c{1}] %m %n" />
    </layout>
    <filter class="org.apache.log4j.varia.LevelMatchFilter">
        <param name="LevelToMatch" value="ERROR" />
        <param name="AcceptOnMatch" value="true" />
    </filter>
    <filter class="org.apache.log4j.varia.DenyAllFilter" />
</appender>

Du kan gøre det ved at konfigurere appender pragmatisk

  FileAppender fa = new FileAppender();
  fa.setFile("/test/crm/log/error.log");
  fa.setLayout(new 
   PatternLayout("%C{1} %L [%t] %d{dd MMM,yyyy HH:mm:ss.SSS} %-5p - %m%n"));
  fa.setThreshold(Level.ERROR);
  fa.setAppend(true);
  fa.activateOptions();
  Logger.getRootLogger().addAppender(fa);
  // similarly you can add all appenders.

 // or just append file name alone 
 Logger log = Logger.getLogger(YourClass.class);
 FileAppender appender = (FileAppender) log.getAppender("ErrorLog");
 appender.setFile("appender");

Java tag