Avatar billede odsgaard Praktikant
25. marts 2009 - 13:35 Der er 8 kommentarer og
1 løsning

Java - log4j - gemme log i flere filer

Hej
Jeg har et problem med at få log4j til at gemme data i forskellige filer. Jeg ønsker, at INFO, DEBUG, ERROR m.m. bliver logget i seperate filer:
INFO i app-info.log
DEBUG i app-debug.log
etc.

Jeg har fundet og tilrettet nedenstående eksempel. Det virker ikke helt efter hensigten, da alle logmeddelser bliver gemt i alle filer.

Håber i kan hjælpe :)

På forhånd tak

Brian Odsgaard

---------------------
FIL: log4j.properties
---------------------
log4j.threshold=ALL
log4j.rootLogger=ALL, stdout, DebugAppender, InfoAppender, WarnAppender,
ErrorAppender

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%c %d{ISO8601} -- %p -- %m%n

log4j.logger.DebugAppender.access=DEBUG
log4j.appender.DebugAppender=org.apache.log4j.RollingFileAppender
log4j.appender.DebugAppender.File=app-debug.log
log4j.appender.DebugAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.DebugAppender.layout.ConversionPattern=%c %d{ISO8601} -- %p --%m%n

log4j.logger.InfoAppender.access=INFO
log4j.appender.InfoAppender=org.apache.log4j.RollingFileAppender
log4j.appender.InfoAppender.File=app-info.log
log4j.appender.InfoAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.InfoAppender.layout.ConversionPattern=%c %d{ISO8601} -- %p -- %m%n

log4j.logger.WarnAppender.access=WARN
log4j.appender.WarnAppender=org.apache.log4j.RollingFileAppender
log4j.appender.WarnAppender.File=app-warn.log
log4j.appender.WarnAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.WarnAppender.layout.ConversionPattern=%c %d{ISO8601} -- %p -- %m%n

log4j.logger.ErrorAppender.access=ERROR
log4j.appender.ErrorAppender=org.apache.log4j.RollingFileAppender
log4j.appender.ErrorAppender.File=app-error.log
log4j.appender.ErrorAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.ErrorAppender.layout.ConversionPattern=%c %d{ISO8601} -- %p --%m%n

------------------
FIL: LogClass.java
------------------
package test;

import org.apache.log4j.Logger;

public class LogClass {
    private static org.apache.log4j.Logger log = Logger
            .getLogger(LogClass.class);

    public static void main(String[] args) {
        log.trace("Trace");
        log.debug("Debug");
        log.info("Info");
        log.warn("Warn");
        log.error("Error");
        log.fatal("Fatal");

    }
}
Avatar billede arne_v Ekspert
25. marts 2009 - 16:21 #1
Foelgende vil ihvertfald bringe dig i normal situation (normal i forhold til log4j paradigmet "print hvis level > X"):

log4j.rootLogger=DEBUG, stdout, DebugAppender, InfoAppender, WarnAppender, ErrorAppender

log4j.appender.stdout.threshold=DEBUG
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%c %d{ISO8601} -- %p -- %m%n

log4j.appender.DebugAppender.threshold=DEBUG
log4j.appender.DebugAppender=org.apache.log4j.RollingFileAppender
log4j.appender.DebugAppender.File=app-debug.log
log4j.appender.DebugAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.DebugAppender.layout.ConversionPattern=%c %d{ISO8601} -- %p --%m%n

log4j.appender.InfoAppender.threshold=INFO
log4j.appender.InfoAppender=org.apache.log4j.RollingFileAppender
log4j.appender.InfoAppender.File=app-info.log
log4j.appender.InfoAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.InfoAppender.layout.ConversionPattern=%c %d{ISO8601} -- %p -- %m%n

log4j.appender.WarnAppender.threshold=WARN
log4j.appender.WarnAppender=org.apache.log4j.RollingFileAppender
log4j.appender.WarnAppender.File=app-warn.log
log4j.appender.WarnAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.WarnAppender.layout.ConversionPattern=%c %d{ISO8601} -- %p -- %m%n

log4j.appender.ErrorAppender.threshold=ERROR
log4j.appender.ErrorAppender=org.apache.log4j.RollingFileAppender
log4j.appender.ErrorAppender.File=app-error.log
log4j.appender.ErrorAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.ErrorAppender.layout.ConversionPattern=%c %d{ISO8601} -- %p --%m%n
Avatar billede arne_v Ekspert
25. marts 2009 - 16:30 #2
Lidt googling siger at det du egentlig oensker kan opnaaes med brug af org.apache.log4j.varia.LevelMatchFilter !

Jeg kan evt. bixe et eksempel senere, hvis du ikke er heldig med google.
Avatar billede odsgaard Praktikant
25. marts 2009 - 21:02 #3
Hej Arne

Du må meget gerne bikse et eksempel sammen. Jeg har prøvet at google det, men kan ikke finde de vise sten.

Kan det lade sig gøre med en properties-file eller skal det være med xml? Jeg foretrækker umiddelbart properties-filen.
Avatar billede arne_v Ekspert
25. marts 2009 - 21:07 #4
Desvaeere er jeg bangge for at man skal over i XML config.

Jeg foretraekker ogsaa property syntaxen.

Jeg laver et eksempel om en 4-5 timer.
Avatar billede odsgaard Praktikant
25. marts 2009 - 22:03 #5
Det lyder godt, jeg kigger på det i morgen tidlig :)

På forhånd tak :)
Avatar billede arne_v Ekspert
26. marts 2009 - 01:18 #6
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
    <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
        <param name="threshold" value="debug"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%c %d{ISO8601} -- %p -- %m%n"/>
        </layout>
    </appender>
    <appender name="DebugAppender" class="org.apache.log4j.RollingFileAppender">
        <param name="threshold" value="debug"/>
        <param name="file" value="app-debug.log"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-30c %d %-5p %m%n"/>
        </layout>
        <filter class="org.apache.log4j.varia.LevelMatchFilter">
            <param name="LevelToMatch" value="debug" />
            <param name="AcceptOnMatch" value="true"/>
        </filter>
        <filter class="org.apache.log4j.varia.DenyAllFilter" />
    </appender>
    <appender name="InfoAppender" class="org.apache.log4j.RollingFileAppender">
        <param name="threshold" value="info"/>
        <param name="file" value="app-info.log"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-30c %d %-5p %m%n"/>
        </layout>
        <filter class="org.apache.log4j.varia.LevelMatchFilter">
            <param name="LevelToMatch" value="info" />
            <param name="AcceptOnMatch" value="true"/>
        </filter>
        <filter class="org.apache.log4j.varia.DenyAllFilter" />
    </appender>
    <appender name="WarnAppender" class="org.apache.log4j.RollingFileAppender">
        <param name="threshold" value="warn"/>
        <param name="file" value="app-warn.log"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-30c %d %-5p %m%n"/>
        </layout>
        <filter class="org.apache.log4j.varia.LevelMatchFilter">
            <param name="LevelToMatch" value="warn" />
            <param name="AcceptOnMatch" value="true"/>
        </filter>
        <filter class="org.apache.log4j.varia.DenyAllFilter" />
    </appender>
    <appender name="ErrorAppender" class="org.apache.log4j.RollingFileAppender">
        <param name="threshold" value="error"/>
        <param name="file" value="app-error.log"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-30c %d %-5p %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>
    <logger name="LogClass">
        <level value="debug"/>
        <appender-ref ref="stdout"/>             
        <appender-ref ref="DebugAppender"/>             
        <appender-ref ref="InfoAppender"/>             
        <appender-ref ref="WarnAppender"/>             
        <appender-ref ref="ErrorAppender"/>             
    </logger>
</log4j:configuration>
Avatar billede arne_v Ekspert
26. marts 2009 - 01:18 #7
Avatar billede arne_v Ekspert
26. marts 2009 - 01:19 #8
og et svar
Avatar billede odsgaard Praktikant
26. marts 2009 - 07:49 #9
Tak for hjælpen

Så kom det til at virke :)

/Brian
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