【发布时间】:2016-11-10 07:41:17
【问题描述】:
这是我在编写简单的自定义 Log4j 实现 (Java) 时想到的一个问题。
我想制作一个自定义的 Log4j Appender,这是通过扩展 AppenderSkeleton 类来完成的。我选择将日志消息写入列表(基本上 append 方法会将消息添加到列表)。我也想要一个关闭选项。由于这是一个简单的实现,我认为 close 方法可以将 List 引用替换为 Sink / Null Reference,这样所有的消息就这样丢失了。
然后我想到了这个问题。真的有一个Sink可以在Java中使用吗?
我期待的是相当于 Linux 中的 /dev/null,但在应用程序编程级别。
【问题讨论】:
-
还有一种方法可以从 Java (主要是 Windows 和 Linux) 引用操作系统中的等效 /dev/null。
-
只需要几行代码就可以编写
OutputStream的子类,它会忽略您编写的所有内容。标准库中没有这样的东西。 -
@Balu 如果您只想丢弃列表,请执行此操作(将列表字段设置为空)。为什么要浪费时间把它写到无处?
-
@Henry Apache Commons IO 有一个
NullWriter和一个NullOutputStream。但是,是的,编写自己的代码很容易。 -
@Andreas 将列表设置为 null 将引发 NullPointerException。然而 NullWriter / NullOutputStream 运作良好。这也给了我一个实现自定义输出流或编写器的想法。谢谢