- 1
- 2
- 3
- 4
- 5
- 6
- 7
SOAPMessage msg = ctx.getMessage();
//msg.writeTo(System.out);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
msg.writeTo(baos);
logger.trace(baos);
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+69
SOAPMessage msg = ctx.getMessage();
//msg.writeTo(System.out);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
msg.writeTo(baos);
logger.trace(baos);
где у хвалёного log4j метод для передачи его как аргументом java.io.OutputStream???
И я не понимаю вопроса. Что значит "для передачи его как аргументом java.io.OutputStream"? Парсер сломался.
http://docs.oracle.com/javaee/1.4/api/javax/xml/soap/SOAPMessage.html#writeTo(java.io.OutputStream)
хочу, например msg.writeTo(logger.foobar(TRACE));
Еще пишут, что где-то в дистрибе log4j в папке contrib есть пример того, как это сделать.
Ничего более изкоробочного не нашлось.
P.S. А msg.toString() и запись результата в лог не катят?
конечный результат - в ОП
TOOWTDI? Нет, не слышали.
Вот за это в том числе я и не люблю яву.
Как я понял defecate++ хочет передать его некой функции, которая принимает OutputStream, и вываливает в него некий дамп некой фигни.
UPD: Ну вот он и сам об этом написал. А я как всегда не обновлял комментарии перед тем как постить.
Логгер - не поток. Атомарная единица потока - байт, а логгера - сообщение. При этом сообщение должно быть текстовым (в то время как в поток можно писать произвольные байты), у сообщения есть дата, источник, опциональный stack trace и прочие прелести жизни.
P.S. Конечно же я понимаю, что аппендер это не лог-файл, и что он может писать во что-то более сложное, например таблицу в базе. Но юзкейс, имхо, вполне жизненный.
В голову приходит еще один вариант - создать аппендера пишущего в поток, и этот самый поток юзать для записи в него дампов. Если аппендер флашит его после каждой месаги - все будет норм. Но что-то я запамятовал, можно ли писать в поток из нескольких тредов.
Вариант плохой, т.к. если поток не лочить на время дампанья, дамп может рассеяться среди сообщений от других тредов.
при этом объект будет уверен, что всего лишь работает с std::ostream
тарасу понравится
подробная ссылочка траеблядства для Тараса, покрасивее:
http://stackoverflow.com/questions/2225221/closing-database-connections-in-java/2225275#2225275
туда сюда её по потокам сувать
а это всё потому, что в жабе нет перегрузки оператора <<
(хотел зелёным, но не буду, ибо всё чистая правда)