# java.util.logging.logger + rmi



## OKShaitan (27. August 2004)

Hallo,
ich habe einen Logger geschrieben, der über RMI angesprochen wird. Allerdings bekomme ich in der Startklasse des Clients eine Fehlermeldung. Leider weiß ich nicht mehr weiter. Es wird ein MasterLogger erstellt, ein logfile initialisiert und ein selbstgeschriebener Logger erstellt, der die Clientanfragen handelt. Und da hängt alles. Vielleicht weiß jemand von euch weiter? Das Problem ist leider doch noch nicht gelöst. War wohl schon etwas spät...


Jetzt der Code und die Konsolenausgabe:

Startklasse des Clients

LoggingInterface log = (LoggingInterface) Naming.lookup(url +"logging");//Verbinden mit dem LoggingServer

log.init(LogFile);//LogBuch erstellt

System.out.println ("LogBook initialisiert");

System.out.println (module);

System.out.println(log); 

//Übergabe des Modulnamens an den Logger

CoyoteLogger logger = log.getLoggerForModule(module);        --> hier findet der Fehler statt!

System.out.println ("Verbunden mit LoggingServer");

logger.info("Es wurde ein Logger erfolgreich initialisiert", simTime, null);



Konsolenausgabe:

LogBook initialisiert

WorkflowServer

Proxy[LoggingInterface,RemoteObjectInvocationHandler[UnicastRef [liveRef: [endpoint:[192.168.0.105:1446](remote),objID:[3f085891:fe9fa64d3d:-8000, 0]]]]]

Exception in thread "main" java.rmi.UnmarshalException: error unmarshalling return; nested exception is: 

java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: java.util.logging.Logger

at sun.rmi.server.UnicastRef.invoke(Unknown Source)

at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(Unknown Source)

at java.rmi.server.RemoteObjectInvocationHandler.invoke(Unknown Source)

at $Proxy1.getLoggerForModule(Unknown Source)

at workflowServer.StartClass.main(StartClass.java:49) ...



LoggingImpl:

/**

* Logger für Module erstellen, wenn kein Modul für Logger existiert  wird ein neuer Logger erstellt

* @param name Name des Moduls

* @return CoyoteLogger

*/

public CoyoteLogger getLoggerForModule(String name){

System.out.println ("in LoggingImpl - getLoggerForModule");

CoyoteLogger reply = (CoyoteLogger) allLoggers.get(name);//Auslesen, ob Logger in Hashtabhle existiert

if (reply == null){//Wenn kein Logger für dieses Modul existiert, ...

reply = createLogger(name);//... wird einer neu erstellt

System.out.println (reply + " getLoggerForModule");

}

return reply;//Rückgabe des Loggers

}//end getLoggerForModule



/**

* Logger für Modul neu erstellen

* @param name Modulname

* @return Neuer Logger

*/

public CoyoteLogger createLogger(String name){

CoyoteLogger newLogger = new CoyoteLogger(masterLogger);// Logger neu erstellen

newLogger.setModuleName(name);//Modulname zum Logger hinzufügen

allLoggers.put(name, newLogger);//Eintragen des Loggers in Hashtable

return newLogger;//Rückgabe des neuen Loggers

}//end createLogger



Konsolenausgabe für LoggingImpl:

Serverimplementierungen konstruieren

LoggingServer erfolgreich gestartet!

MasterLogger in LoggingImpl initialisiert

init in MasterLogger

zu JavaLogger hinzugefügt.

Level zu JavaLogger gesetzt

MasterLogger in LoggingImpl erstellt

in LoggingImpl - getLoggerForModule

logging.CoyoteLogger@181afa3 getLoggerForModule


----------

