tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
8
ZUGRIFFE
2986
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Kryptaesthesie Kryptaesthesie ist offline Mitglied Gold
    Registriert seit
    Feb 2005
    Ort
    127.0.0.1
    Beiträge
    189
    Guten Tag,
    ich möchte gerne eine zweite log4j.xml definieren und muss dazu den Pfad neu angeben und habe mal folgendes probiert:
    Code :
    1
    2
    
    URL path2Conf = this.getClass().getClassLoader().getResource("de/hes/log4j/applets/log4j.xml");
    DOMConfigurator.configure(path2Conf);
    Das Ganze soll dann in einem Applet laufen und das Applet sucht die XML jetzt in C:\Programme\Mozilla Firefox\de\hes\log4j\applets\log4j.xml

    Wie kann ich die Datei aus der jar laden?
    Wisst ihr da Rat?


    Warum nicht alles in einer XML?
    Weil Konfigurationen, die bei dem einen benutzt werden, in dem anderen Programm nicht zu sehen sein sollen, wenn jemand die Jar entpackt und reinschaut.


    Gruß
    Gerrit
     

  2. #2
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.962
    Kriegst du denn so wies da steht eine URL zurück?
     

  3. #3
    Kryptaesthesie Kryptaesthesie ist offline Mitglied Gold
    Registriert seit
    Feb 2005
    Ort
    127.0.0.1
    Beiträge
    189
    Zitat Zitat von zeja Beitrag anzeigen
    Kriegst du denn so wies da steht eine URL zurück?
    jap
    siehe Screenshot!
    Im Screenshot sieht man auch noch eine andere Variante, wie ich's probiert habe, ohne Erfolg.


    Gruß
    Gerrit
    Miniaturansicht angehängter Grafiken Miniaturansicht angehängter Grafiken Log4j: Pfad zur log4j.xml explizit angeben - DOMConfigurator.configure()-hc_001_edit.jpg  
     

  4. #4
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.962
    Könnte ja auch null sein das Objekt. Das meine ich. Vielleicht kann log4j aber nicht mir URLs innerhalb eines JARs umgehen. Schau doch mal ob man auch mit nem InputStream konfigurieren kann.
     

  5. #5
    Kryptaesthesie Kryptaesthesie ist offline Mitglied Gold
    Registriert seit
    Feb 2005
    Ort
    127.0.0.1
    Beiträge
    189
    Hallo nochmal

    Also ich komme einfach nicht weiter. Habe es jetzt auf die verschiedensten Varianten probiert. Aber das Einlesen einer Resource will einfach nicht klappen.
    Versuche es mit folgenden Code:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
        private Element getElement4Log4j()
        {
            try
            {
                File f = new File (this.getClass().getClassLoader().getResource("de/xyz/log4j/applets/log4j.xml").getFile());
                
                DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
          DocumentBuilder builder = factory.newDocumentBuilder();
          Document document = builder.parse( f );
          // ---- Get list of nodes to given element tag name ----
          NodeList ndList = document.getElementsByTagName( "log4j:configuration" );
     
          System.out.println("ndList length: " + ndList.getLength());
          Element el = (Element) ndList.item(0);
          return el;
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
            
            return null;
        }
    Und bekomme in der Javakonsole, wenn ich die Webseite mit dem Applet aufrufe folgende Meldung:
    java.io.FileNotFoundException: C:\Programme\Mozilla Firefox\http:\172.30.54.239:8080\mdtscan\work\listedrucken.jar!\de\hes\log4j\applets\log4j.xml (Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(Unknown Source)
    at java.io.FileInputStream.<init>(Unknown Source)
    at sun.net.www.protocol.file.FileURLConnection.connect(Unknown Source)
    at sun.net.www.protocol.file.FileURLConnection.getInputStream(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
    at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
    at de.hes.web.applets.ListeDruckenGUI.getElement4Log4j(ListeDruckenGUI.java:187)
    at de.hes.web.applets.ListeDruckenGUI.init(ListeDruckenGUI.java:63)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
    Und egal wie ich das Ganze wende und drehe - auch mit URL - ich komme immer wieder bei diesem Problem heraus.


    Weiß jemand Rat?


    Vielen Dank
    Gruß
    Gerrit
     

  6. #6
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.962
    Wie ich schon sagte: Verwende getResourceAsStream und lies aus dem InputStream ein.
     

  7. #7
    Kryptaesthesie Kryptaesthesie ist offline Mitglied Gold
    Registriert seit
    Feb 2005
    Ort
    127.0.0.1
    Beiträge
    189
    Zitat Zitat von zeja Beitrag anzeigen
    Wie ich schon sagte: Verwende getResourceAsStream und lies aus dem InputStream ein.
    man muss es nur richtig machen und schon funktioniert es!

    Danke zeja


    Sieht nun so aus:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    
    public class SpecialLog4jUtils
    {
     
        private Class parentClass;
        
        
        public SpecialLog4jUtils(Class classThisObjIsCalledIn)
        {
            this.parentClass = classThisObjIsCalledIn;
        }
        
        /**
         * Liest eine XML-Datei aus und gibt diese als <code>Element</code> zurück.
         * 
         * @param path2log4jxml - Package (mit beginnendem Slash!) und Dateiname der Konfig: <code>/de/hes/conf/log4j.xml</code>
         * @return
         */
        public Element getElement4Log4j(String path2log4jxml)
        {
            try
            {
                InputStream is = this.parentClass.getResourceAsStream(path2log4jxml);
                
                DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
          DocumentBuilder builder = factory.newDocumentBuilder();
          Document document = builder.parse( is );
          
          return document.getDocumentElement();
            }
            catch (Exception e)
            {
                e.printStackTrace();
                
                return null;
            }
        }
    }
    Und der Aufruf an sich sieht dann so aus:
    Code :
    1
    
    DOMConfigurator.configure(new SpecialLog4jUtils(this.getClass()).getElement4Log4j("/de/xyz/log4j/applets/log4j.xml"));
    Hoffe, das hilft evtl. weiter!
    Gruß
    Gerrit
     

  8. #8
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.962
    Ich wollte damit eigentlich bewirken dass du in die API schaust und dir nicht irgendwas abenteuerliches selber bastelst.

    Code java:
    1
    
    new DOMConfigurator().doConfigure(is, LogManager.getLoggerRepository());
     

  9. #9
    Kryptaesthesie Kryptaesthesie ist offline Mitglied Gold
    Registriert seit
    Feb 2005
    Ort
    127.0.0.1
    Beiträge
    189
    Zitat Zitat von zeja Beitrag anzeigen
    Ich wollte damit eigentlich bewirken dass du in die API schaust und dir nicht irgendwas abenteuerliches selber bastelst.

    java Code: new DOMConfigurator().doConfigure(is, LogManager.getLoggerRepository());


    oh ja, das ist wirklich viel schöner als meine Bastelei
    Code :
    1
    2
    
    // spezielles Log-File für das Applet festlegen - muss erste Anweisung sein!
    new DOMConfigurator().doConfigure(this.getClass().getResourceAsStream("/de/xyz/log4j/applets/log4j.xml"), LogManager.getLoggerRepository());
    Danke!
     

Ähnliche Themen

  1. JSF und Log4J
    Von Hardi82 im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 5
    Letzter Beitrag: 23.11.09, 16:49
  2. Loggen mit log4j
    Von irfl im Forum Java
    Antworten: 30
    Letzter Beitrag: 23.07.08, 12:24
  3. log4j
    Von WIK-Lars im Forum Java
    Antworten: 1
    Letzter Beitrag: 02.08.07, 09:43
  4. log4j
    Von burakbalbina im Forum Java
    Antworten: 0
    Letzter Beitrag: 05.07.06, 17:17
  5. log4j
    Von lernen.2007 im Forum Java
    Antworten: 4
    Letzter Beitrag: 27.04.06, 09:32