当前位置: 首页 > 知识库问答 >
问题:

Java:将Marshaller输出重定向到log4j

戚修雅
2023-03-14

我想让我的程序记录给定对象的XML使用:

Marshaller.marshal(Object jaxbElement, OutputStream os);

目前,我使用stdout作为输出流。但是stdout没有打印在log4j日志文件中。

JAXBContext jc = JAXBContext.newInstance(SomeClass.class);
Marshaller m = jc.createMarshaller();
m.marshal(input, System.out);

如何将此方法的输出重定向到log4j日志文件?

谢啦

共有1个答案

牧宁
2023-03-14

请参见ByteArrayOutputStream以创建OutputStream,并使用ByteArrayOutputStream#toString()将其转换为字符串。

修改后的代码:

OutputStream os = new ByteArrayOutputStream();
JAXBContext jc = JAXBContext.newInstance(SomeClass.class);
Marshaller m = jc.createMarshaller();
m.marshal(input, os);
String xml = os.toString();
logger.debug(xml);

 类似资料:
  • 问题内容: 我想从Groovy程序中执行foo.bat,并将生成的进程的输出重定向到stdout。Java或Groovy代码示例都可以。 foo.bat可能需要花费几分钟才能运行并生成大量输出,因此我希望在生成后立即查看输出,而不是必须等到该过程完成之后才能立即查看所有输出。 问题答案: 它使用一个类读取执行的程序生成的所有输出,并将其显示在其自己的stdout中。

  • 问题内容: 我正在AIX 6上工作,在KIX Shell上运行Java命令,并且正在尝试调试类加载问题。我放了-verbose:class来打印加载的类,然后>> / home / user / log.log将控制台放到一个文件中。已创建log.log文件,但其大小为零。文件不包含任何信息,所有详细信息都在一闪而过。 问题答案: 也尝试重定向: 您的Java代码可能正在编写您的命令未重定向的信息

  • 问题内容: 我知道在Linux中,要将输出从屏幕重定向到文件,可以使用或。但是,我不确定为什么部分输出仍会输出到屏幕上而不写入文件。 有没有办法将所有输出重定向到文件? 问题答案: 该部分已写入stderr,用于重定向它。例如: 或者,如果您要在同一文件中: 注意:这在(ba)sh中有效,请检查您的shell语法是否正确

  • 问题内容: 我有一个Python脚本,它利用“打印”来打印到stdout。我最近通过Python Logger添加了日志记录,并希望通过日志记录使这些打印语句进入日志记录器(如果启用了日志记录)。我不想修改或删除这些打印语句。 我可以通过执行’log.info(“ some info msg”)’进行记录。我希望能够做这样的事情: 如果启用了日志记录,则应该像记录log.info(“ test”)

  • 问题内容: 我C编码的一个基本的壳,用于执行基本命令它会执行命令,,等。 我想在我的外壳中执行以下命令。喜欢 ; 这将给我包含过程输出的文件。我找到了一个解决方案,它正在像这样更改shell中的命令。在这种情况下,它将更改为。但是此过程会将输出也提供给文件和终端。如何在终端中停止打印输出。 还是有比使用tee命令更好的解决方案。提前致谢… 问题答案: 这是我用dup2测试的结果 更微妙的一点是在正

  • 问题内容: 我想在JavaFX TextArea中显示控制台输出…不幸的是,我找不到JavaFX的任何有效示例,而只能找到Java Swing的实例,在我看来,这似乎不起作用。 编辑: 我尝试遵循以下示例:http : //unserializableone.blogspot.ch/2009/01/redirecting-systemout-and-systemerr- to.html 并扩展了我