【问题标题】:How do I redirect the java logger output MQTT to a topic on a specific MQTT broker如何将 java 记录器输出 MQTT 重定向到特定 MQTT 代理上的主题
【发布时间】:2020-02-06 20:22:11
【问题描述】:

我有一个 Java 程序在 IOT 设备上收集能量数据,它通过 MQTT 将其发送到 Node-RED 以存储在 InFlux 上并通过 Grafana 呈现。我还通过 MQTT 将关于单独主题的简单日志消息发送到 Node-RED 以进行调试。我可以通过 SSH 在我的 IOT 设备(RPi 零 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;
        }
    }
}

我发现 loggly.com 在解释术语时很有用,通读之后,我相信我正在寻找一个与 MQTT 一起使用的附加程序

【问题讨论】:

  • 我在 github 上看到 log4j to mqtt appender:github.com/radekg/log4mqtt(我没试过)
  • 我快速浏览了一下,但它没有维护,也不是最新的。我希望使用标准记录器的前端,但使用 MQQT 处理程序重定向后端,所以这是在正确的球场,谢谢

标签: java logging mqtt iot


【解决方案1】:

SLF4J 是任何与 java 日志相关的好选择,无需重新发明轮子。您可以登录任何您想要的文件格式。

【讨论】:

  • 我不希望它在我想通过 MQTT 发送的文件中
  • 好的,你仍然可以用 SLF4J 做到这一点
  • OK 通读了 SLF4J 的介绍,它似乎被定位为一个前端的其他日志系统的框架(尽管它确实具有构建独立日志系统的组件)。我不需要它提供的隔离层,只需要一个新的 appender。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-29
相关资源
最近更新 更多