Log4j-Konfiguration - verschiedene Protokolle für verschiedene Dateien

Für einige mag dies eine sehr einfache Frage sein, aber ich persönlich finde, dass die Log4j-Konfiguration albtraumhaft schwierig ist und dass das Erlernen von Gehirnoperationen weniger schwierig sein kann.

Ich versuche mehrere Logger in verschiedene Dateien einzuloggen. Folgendes ist in meiner Datei log4j.properties enthalten:

# Root logger option
log4j.rootLogger=INFO, file, admin

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=/home/nick/logging/file.log
log4j.appender.file.MaxFileSize=1MB
log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1} - %m%n

log4j.appender.admin=org.apache.log4j.RollingFileAppender
log4j.appender.admin.File=/home/nick/logging/admin.log
log4j.appender.admin.MaxFileSize=1MB
log4j.appender.admin.MaxBackupIndex=1
log4j.appender.admin.layout=org.apache.log4j.PatternLayout
log4j.appender.admin.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1} - %m%n

Und hier ist meine (sehr einfache) Java-App zum Testen der Konfiguration:

public static void main(String[] args) throws Exception {

    Properties resource = new Properties();
    InputStream in = new FileInputStream("/home/nick/logging/log4j.properties");
    resource.load(in);
    PropertyConfigurator.configure(resource);

    Logger admin = Logger.getLogger("admin");
    Logger file = Logger.getLogger("file");

    admin.info("hello admin");
    file.info("hello file");
}

Ich habe 2 Probleme:

Ein Problem bekomme ich immer eine Ausnahme in der LeitungPropertyConfigurator.configure(resource);:

java.io.FileNotFoundException: /home/nick/logging (Is a directory)
 at java.io.FileOutputStream.open(Native Method)
 at java.io.FileOutputStream.<init>(FileOutputStream.java:212)
 at java.io.FileOutputStream.<init>(FileOutputStream.java:136)
 at org.apache.log4j.FileAppender.setFile(FileAppender.java:289)
 at org.apache.log4j.RollingFileAppender.setFile(RollingFileAppender.java:167)
 at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:163)
 at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:256)

Das zweite Problem ist, dass beide Nachrichten in beide Protokolle geschrieben werden. Hier ist dertatsächlich Ergebnis:

Datei admin: log:

2014-04-27 11:55:30 INFO  admin - hello admin
2014-04-27 11:55:30 INFO  file - hello file

Datei file.log:

2014-04-27 11:55:30 INFO  admin - hello admin
2014-04-27 11:55:30 INFO  file - hello file

Hier ist dererforderlich Ergebnis:

Datei admin: log:

2014-04-27 11:55:30 INFO  admin - hello admin

Datei file.log:

2014-04-27 11:55:30 INFO  file - hello file

Was ist die Ursache für die Ausnahme und wie kann ich das erforderliche Ergebnis erzielen?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage