2011-07-15 7 views

Odpowiedz

6

XStream jest niezmiernie dobra w drukowaniu wykresów obiektów, nawet w cyklach obsługi bez dodatkowej konfiguracji lub dodatkowego kodu w twoich klasach (tj. Bez zszywania z toString()). Po prostu dodaj bibliotekę i możesz to zrobić w dowolny sposób i uzyskać ładne, użyteczne wyjście:

log.debug("The object: {}", new XStream().toXML(anyObject)); 

To da ci wynik XML. Jeśli wolisz JSON, możesz uzyskać go z odrobiną więcej pracy, jak opisano w XStream JSON tutorial.

0

Serializacja Java, dostarczana z Javą, powinna wystarczyć. Będzie jednak w formacie binarnym.

Istnieje również serializacji XML, które mogą być świadczone przez JAXB

+0

Czy uważasz, że format binarny jest odpowiedni do pliku dziennika? :) – yegor256

+0

Dobra uwaga. Właśnie dodałem link do JAXB. –

4

Proponuję spojrzeć zarówno na Apache Commons BeanUtils lub Apache Commons Lang, szczególnie ReflectionToStringBuilder.

0

można użyć refleksji

getClass a następnie przejść na każdej zmiennej instancji i przejść na (niektóre przedmioty mogą być traktowane specjalnie (jak smyczki))

0

Należy użyć odbicie. Spójrz na klasę java.lang.Class, a konkretnie na metodę .getFields().

0

The java reflection API da Ci dostęp do wszystkich tych rzeczy (prywatne członków i wszystkie). Aby uzyskać prywatnych członków, musisz uzyskać yourObject.getClass().getDeclaredFields(), aby uzyskać dostęp do prywatnego pola, pamiętaj, aby zadzwonić pod numer yourField.setAccesible(true).

Oczywiście, bardzo szybko napotkasz problemy, radząc sobie z własną klasą, aby to zrobić poprzez odbicie. Główne problemy pojawiają się, gdy próbuje się zdecydować, aby ostatecznie wydrukować wartość i określić, czy jest to enum, prymitywny, prymitywny tablica i tak dalej. Możesz użyć metody Class.isPrimitive, aby dowiedzieć się, jak to zrobić. Aby uzyskać dostęp do elementów tablicy, użyj klasy java.lang.reflect.Array.

Najlepszą opcją, która została opublikowana wcześniej, jest użycie ReflectionToStringBuilder apache commons.

0

Serializator json wykona zadanie, np. przy użyciu Gson:

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import com.google.gson.Gson; 

... 

private static final Logger LOG = LoggerFactory.getLogger(Your.class); 

... 

Object obj = ...; 
LOG.info(new Gson().toJson(obj)); 
Powiązane problemy