Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 Auto .toString()  [new]
Molasar
Member

Откуда:
Сообщений: 768
Всем привет!

Есть собственный класс Event со своей реализацией toString.
Почему здесь работает:
System.out.println(sendEvent);

А здесь выдает no suitable method found for info(Event) ?
logger.info(sendEvent);
11 сен 19, 15:31    [21968612]     Ответить | Цитировать Сообщить модератору
 Re: Auto .toString()  [new]
Molasar
Member

Откуда:
Сообщений: 768
И в систем ауте и в логгере на вход принимается стринг и java автоматом должна использовать toString в обоих случаях.
11 сен 19, 16:47    [21968679]     Ответить | Цитировать Сообщить модератору
 Re: Auto .toString()  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 7939
Molasar
А здесь выдает no suitable method found for info(Event) ?

Думать над смыслом сообщения об ошибке. Смотреть описание метода info( ).
11 сен 19, 16:49    [21968683]     Ответить | Цитировать Сообщить модератору
 Re: Auto .toString()  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 7939
Molasar
....и в логгере на вход принимается стринг...

Доку не смотрел. Сорцы искать лениво.
НО "не верю" ( C )

Укажите классы, дайте ссылку на сорцы. Тогда можно разводить холивар.
11 сен 19, 16:53    [21968685]     Ответить | Цитировать Сообщить модератору
 Re: Auto .toString()  [new]
chpasha
Member

Откуда:
Сообщений: 8471
Molasar
в систем ауте на вход принимается стринг

неужели? а посмотреть? вдруг там перегруженные методы есть?
11 сен 19, 16:57    [21968689]     Ответить | Цитировать Сообщить модератору
 Re: Auto .toString()  [new]
Molasar
Member

Откуда:
Сообщений: 768
класс Event
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.Properties;

public class Event {

    Properties properties;

    public Event() {
        this.properties = new Properties();
    }
    
    public Event(String jsonString) throws IOException {
        StringReader reader = new StringReader(jsonString);
        this.properties = new ObjectMapper()
                .readValue(reader, Event.class)
                .getProperties();
    } 

    public Properties getProperties() {
        return properties;
    }

    public void setProperties(Properties properties) {
        this.properties = properties;
    }

    @Override
    public String toString() {
        StringWriter writer = new StringWriter();
        try {
            new ObjectMapper().writeValue(writer, this);
        } catch (IOException ex) {
        }
        return writer.toString();
    }

}

Приложение:
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class JsonSerial {

    private static final Logger logger
            = LoggerFactory.getLogger(JsonSerial.class);

    public static void main(String[] args)
            throws IOException, JMSException, InterruptedException {
        Event sendEvent = new Event();
        sendEvent.getProperties().put("id", "12345678");
        sendEvent.getProperties().put("type", "transaction");
        sendEvent.getProperties().put("name", "identification");
        
        logger.info(sendEvent);
    }
}
11 сен 19, 17:02    [21968695]     Ответить | Цитировать Сообщить модератору
 Re: Auto .toString()  [new]
Lelouch
Member

Откуда: Москва
Сообщений: 1784
Molasar,

Вообще, вам уже намернули:
System.out - это PrintStream (https://docs.oracle.com/javase/7/docs/api/java/lang/System.html#out)
У PrintStream есть метод println(Object) (https://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html#println(java.lang.Object))
11 сен 19, 17:39    [21968734]     Ответить | Цитировать Сообщить модератору
 Re: Auto .toString()  [new]
Molasar
Member

Откуда:
Сообщений: 768
Т.е. не получится в логгер кидать свой класс даже с переопределенным методом toString?
Lelouch
Molasar,

Вообще, вам уже намернули:
System.out - это PrintStream (https://docs.oracle.com/javase/7/docs/api/java/lang/System.html#out)
У PrintStream есть метод println(Object) (https://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html#println(java.lang.Object))
11 сен 19, 17:51    [21968760]     Ответить | Цитировать Сообщить модератору
 Re: Auto .toString()  [new]
Lelouch
Member

Откуда: Москва
Сообщений: 1784
Molasar,

Как аргумент для форматирования - получится.
Например, тут: https://www.tutorialspoint.com/slf4j/slf4j_parameterized_logging.htm
11 сен 19, 17:54    [21968768]     Ответить | Цитировать Сообщить модератору
 Re: Auto .toString()  [new]
Molasar
Member

Откуда:
Сообщений: 768
В примере приведена конструкция:
logger.info("" + sendEvent);
которая у меня работает.
Lelouch
Molasar,

Как аргумент для форматирования - получится.
Например, тут: https://www.tutorialspoint.com/slf4j/slf4j_parameterized_logging.htm
11 сен 19, 18:02    [21968789]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить