如何将java记录器输出MQTT重定向到特定MQTT代理上的主题
我有一个java程序在IOT设备上收集能量数据,它通过MQTT发送到节点RED,以便在流入时存储,并通过Grafana呈现。出于调试目的,我还通过MQTT将单独主题上的简单日志消息发送到Node RED。我可以通过SSH在我的物联网设备(一个RPi Zero W)上获得控制台,但它非常慢而且不可靠。我希望使用java系统记录器进行日志记录,但我希望将输出格式化为可读字符串或json,并发送到我在MQTT代理上指定的主题。 那么,是否有一个日志处理程序可用于执行此操作,或者我将如何编写一个日志处理程序 我当前的日志程序如下所示,它从共享的字符串队列中提取日志消息如何将java记录器输出MQTT重定向到特定MQTT代理上的主题,java,logging,mqtt,iot,Java,Logging,Mqtt,Iot,我有一个java程序在IOT设备上收集能量数据,它通过MQTT发送到节点RED,以便在流入时存储,并通过Grafana呈现。出于调试目的,我还通过MQTT将单独主题上的简单日志消息发送到Node RED。我可以通过SSH在我的物联网设备(一个RPi Zero W)上获得控制台,但它非常慢而且不可靠。我希望使用java系统记录器进行日志记录,但我希望将输出格式化为可读字符串或json,并发送到我在MQTT代理上指定的主题。 那么,是否有一个日志处理程序可用于执行此操作,或者我将如何编写一个日志处理
public class PMLogger extends Thread
{
String msg;
LinkedBlockingQueue<String> loggingQ;
public PMLogger(LinkedBlockingQueue<String> logQ)
{
this.loggingQ = logQ;
}
//
// Runnable implementation
//
@Override
public void run()
{
try {
Thread.sleep(1000); // wait for publisher to be set up
} catch (InterruptedException e) {
e.printStackTrace();
}
MQTTHandler publisher = Main.getMqttHandler();
String json;
boolean exit = false;
try {
while (!(interrupted() || exit)) {
msg = loggingQ.take();
if (msg.equalsIgnoreCase("exit")) {
exit = true;
} //poison pill
json = "{\"Time\":" +
"\"" + Instant.now().toString() + "\"," +
"\"LogMsg\":" +
"\"" + msg + "\"}";
publisher.logToBroker(json);
Thread.sleep(10);
}
} catch (InterruptedException | NullPointerException e) {
e.printStackTrace();
exit = true;
}
}
}
公共类PMLogger扩展线程
{
串味精;
LinkedBlockingQueue loggingQ;
公共PMLogger(LinkedBlockingQueue logQ)
{
this.loggingQ=logQ;
}
//
//可运行的实现
//
@凌驾
公开募捐
{
试一试{
Thread.sleep(1000);//等待发布服务器设置
}捕捉(中断异常e){
e、 printStackTrace();
}
MQTTHandler publisher=Main.getMqttHandler();
字符串json;
布尔退出=假;
试一试{
而(!(中断()| |退出)){
msg=loggingQ.take();
如果(消息equalsIgnoreCase(“退出”)){
退出=真;
}//毒丸
json=“{\”时间\”:+
“\”“+Instant.now().toString()+”\“,”+
“\“LogMsg\”:”+
“\”“+msg+”\“}”;
publisher.logToBroker(json);
睡眠(10);
}
}捕获(InterruptedException | NullPointerException e){
e、 printStackTrace();
退出=真;
}
}
}
我发现在解释术语方面很有用,通读了这些术语之后,我相信我正在寻找一个与MQTT一起工作的appender,它是与java日志相关的任何东西的好选择,无需重新发明轮子。您可以使用任何想要的文件格式登录。我不想要通过MQTTOk发送的文件,您可以通过SLF4J实现这一点。在阅读了SLF4J的介绍之后,它似乎被定位为面向其他日志系统的框架(尽管它确实有组成独立日志系统的组件)。我不需要它提供的隔离层,只需要一个新的appender。我希望使用标准记录器的前端,但使用MQQT处理程序重定向后端,所以这是正确的,谢谢