# Object Cast Problem nach Übertragung mit Log4j



## Happyemo (23. Okt 2009)

Hallo, ich habe hier ein kleines Problem mit Log4j (mal wieder)

Ich arbeite an einem zentralen Logging System. Das versuche ich mit Log4j mit einer Client/Server Applikation mit dem SocketAppender zu realisieren.
Es ist für mich zwangsweise nötig, eigene Objekte vom Client zum Server zu übertragen.

Das Problem ist, dass die eigenen LogObjects nach der Übergabe vom Client zum Server nicht gecastet werden können. Hier mal ein Code-Ausschnitt:

Client:

```
public void run() 
		{
		PropertyConfigurator.configureAndWatch( "log.properties", 60*1000 );
		logger.info(new LogObject());
		}
```
Server:



```
...
				event=(LoggingEvent) inStream.readObject();
				System.out.println("Trying to cast LoggingEvent.getMessage()-Object to LogObject");
				LogObject e=(LogObject)event.getMessage();
			...
```

.getMessage  sollte eigentlich in der Lage sein, eigens erstellte Objekte zu überliefern, zumindest sagen das JavaDoc und auch ein Beispiel auf dieser Website:

Re: Parse the message part into multiple columns in the sql-database

Jedoch wirft er beim casten sofort eine Exception:

java.lang.ClassCastException: java.lang.String cannot be cast to com.socketLogger.objects.LogObject

Klar, .getMessage() holt also einen String, aber nach dem Beispiel sollte es doch funktionieren ein eigenes Objekt zu übersenden (!)
Wisst ihr zufällig ob man da ggf. an dem Objekt etwas ändern muss oder an was das liegen kann?
Bin etwas ratlos atm

MfG


----------



## nope (23. Okt 2009)

hallo happemo,

habe ein ähnliches problem seit ein paar tagen!
kann jemand helfen? ;(


----------



## Wildcard (23. Okt 2009)

Die Doku der Methode sagt doch dick und fett das Object 'message' mit einem ObjectRenderer in einen String umgewandelt wird.


----------



## Unregistriert (26. Okt 2009)

Naja, also wenn ich mich nicht irre sollte ein Objekt schon durchgereicht werden, wenn man sich den Sourcecode mal anschaut: 

  276     /**
  277        Return the message for this logging event.
  278   
  279        <p>Before serialization, the returned object is the message
  280        passed by the user to generate the logging event. After
  281        serialization, the returned value equals the String form of the
  282        message possibly after object rendering.
  283   
  284        @since 1.1 */
  285     public
  286     Object getMessage() {
  287       if(message != null) {
  288         return message;
  289       } else {
  290         return getRenderedMessage();
  291       }
  292     }


Oder irre ich mich da?


----------



## HoaX (26. Okt 2009)

Aber nicht Logger#info(Object):


			
				Api hat gesagt.:
			
		

> public void info(java.lang.Object message)
> 
> Log a message object with the INFO Level.
> 
> ...


----------



## Unregistriert (27. Okt 2009)

Ok, dankeschön.

Aber da hab ich noch eine Frage: 
Wie schaffe ich das denn nun, clientseitig ein Object zu senden? Ich habe keine entsprechende/n Methode/n gefunden. Denn wenn Serverseitig eine entsprechende "auffangmethode" existiert, muss es doch irgendetwas geben!

MfG


----------

