Hallo,
habe einen eigenen Logger implementiert, den ich über RMI ansprechen will.
Eine Datei kann ich initialisieren. Auch einen Logger bekomme ich übergeben. Ich habe auch alles Serializiert, daher weiß ich jetzt nicht, was ich noch tun kann. Falls er sich daran stößt,daß das Logging in der statischen MainMethode stattfindet, habe ich bereits alle Inhalte der Main ausgelagert auf eine andere Klasse und rufe nur diese eine Methode auf. Aber immer noch die gleiche Fehlermeldung
In einer Woche ist Abgabetermin. Daher bin ich für jede Hilfe dankbar.
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,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