我正在实现一个在目标硬件上运行的非常轻量级(嵌入式)OSGi框架。要附加控制台,我使用org.apache.felix.gogo.shell和org.apache.felix.shell.remote。在OSGi控制台上打印消息
到目前为止,我已经使用System.out.println记录了所有自定义消息,这些消息工作正常,但现在我使用的是远程控制台,我需要某些东西可以将我的消息“打印”到OSGi控制台(并希望同时出现在目标控制台以及由felix.shell.remote提供的telnet控制台上)。
我猜一定有办法得到一个OutputStream(或类似)的句柄来做到这一点;我的问题是如何?似乎大多数人重定向他们的stdout等来解决这样的问题。
我正在使用声明式服务,所以我希望能够设置一个组件,它附加了一个引用的服务(不重要,但会使它更好,更整洁)。
任何帮助,非常感谢。
我已经得到了一个非常具体的日志实现(对数据库;我有非常严格的磁盘空间要求),所以我真的很犹豫要触摸OSGi日志服务(除非你可以关闭写入磁盘? )。 我真的在shell运行时暴露出一个服务,它给了我一个输出流,或者为每个连接的控制台输出流。 我想我可以使用CommandProvider并保存CommandInterpreter(ci)对象,然后对每个日志消息使用ci.print(),但是看起来ci对象在该方法结束后会被销毁(重定向到主控制台代替)。 – Aaron
OSGi日志服务只是一个中介。它在启动过程中保留一个简短的缓冲区来保存历史记录因此,捕获日志记录并将其写入磁盘是非常有用的。请参阅OSGi日志读取器服务。 –