开源日志库spdlog TCP远程日志 踩坑记录 spdlog tcp demo

本文详细指导如何在spdlog中实现实时TCP日志输出,包括添加工厂函数和编写示例,以及遇到的小问题和解决方法。
摘要由CSDN通过智能技术生成

官方example.cpp中没有tcp输出日志的方法,在此对spdlog进行tcp输出日志进行实现:

1、功能实现

1.1 添加工厂

spdlog中不知为何没有实现tcp_logger的工厂,打开文件 “include\spdlog\sinks\tcp_sink.h”,找到文件末尾:

} // namespace sinks
} // namespace spdlog

在最后一行之前添加内容如下:

} // namespace sinks
//
// factory functions
//
template<typename Factory = spdlog::synchronous_factory>
inline std::shared_ptr<logger> tcp_logger_mt(const std::string &logger_name, sinks::tcp_sink_config skin_config)
{
    return Factory::template create<sinks::tcp_sink_mt>(logger_name, skin_config);
}
} // namespace spdlog

并在此类中添加头文件

#include<spdlog/details/synchronous_factory.h>

1.2 编写demo

完成以上改动后,就可以向tcp服务端发送日志了,spdlog座作为tcp客户端,向tcp服务端发送ASCII码的字符串日志,每条日志间以换行结束

#include "spdlog.h"
#include "spdlog/sinks/tcp_sink.h"
void tcp_example()
{
    spdlog::sinks::tcp_sink_config cfg("127.0.0.1", 11091);
    auto my_logger = spdlog::tcp_logger_mt("tcplog", cfg);
    my_logger->set_level(spdlog::level::debug);
    my_logger->info("hello world");
}

2、小坑记录

如果日志初始化的时候,对应的tcp服务端没有启动,会抛出异常:

并且不会重连,此条日志会在控制台输出:

并不会保留此条日志的内容

而正常初始化的情况下,是可以自动重连tcp服务的。

spdlog的tcp类路径为:

include\spdlog\details\tcp_client.h            \\linux
include\spdlog\details\tcp_client-windows.h    \\windows

初始化连接失败会在此类的 connect 函数中抛出异常。

### 回答1: Modbus TCP/IP Demo是一个用于演示和实践Modbus通信协议的示例项目。Modbus是一种常用的工业通信协议,用于在工业设备之间进行数据交换。 Modbus TCP/IP是基于TCP/IP协议的Modbus变种,它使用以太网作为通信介质,使得设备之间可以通过互联网进行数据传输。Modbus TCP/IP Demo可以帮助用户学习和了解如何使用Modbus TCP/IP进行通信。 该示例项目通常包括一个模拟的Modbus TCP/IP服务器和一个或多个Modbus TCP/IP客户端。服务器模拟一个实际的设备,可以响应来自客户端的请求,并发送数据给客户端。客户端可以发送读取和写入数据的请求给服务器,并接收服务器返回的数据。 通过Modbus TCP/IP Demo,用户可以学习如何设置和配置Modbus TCP/IP服务器和客户端,包括IP地址、端口号等。用户还可以学习如何使用不同的功能码来读取和写入不同类型的数据,例如读取寄存器、读取线圈状态、写入寄存器等。 该示例项目的目的是帮助用户熟悉和掌握Modbus TCP/IP通信协议的使用。通过实践演示,用户可以了解Modbus协议的工作原理、数据传输流程等重要概念,并学会如何在实际应用中应用Modbus协议。 总之,Modbus TCP/IP Demo是一个有助于学习和实践Modbus TCP/IP通信协议的示例项目,通过它,用户可以深入了解该协议的使用方法,并为工业设备之间的数据交换提供灵活和可靠的解决方案。 ### 回答2: Modbus TCP/IP demo 是一个用于展示 Modbus TCP/IP 协议的示例程序。Modbus TCP/IP 是一种在 TCP/IP 网络上进行数据通信的协议,广泛应用于工业自动化领域。 该示例程序通常由客户端和服务器两部分组成。服务器部分负责接收和处理客户端请求,客户端部分负责向服务器发送请求并接收服务器的响应。 在示例程序中,可以通过模拟客户端发送各种类型的 Modbus TCP/IP 请求报文,例如读取输入寄存器、读取保持寄存器、写入单个保持寄存器等。服务器端会解析并处理这些请求,并返回相应的数据给客户端。 通过使用 Modbus TCP/IP demo,我们可以学习并理解 Modbus TCP/IP 协议的工作原理和数据传输方式。可以通过该示例程序实现跟实际设备的通信交互,从而实现对设备的监控和控制。 在实际应用中,可以根据 Modbus TCP/IP 协议的规范来开发客户端和服务器端的软件。可以通过编程语言,如C++、Java等,来实现Modbus TCP/IP协议的通信功能。同时,也可以使用现成的开源或其他第三方软件来简化开发过程。 总之,Modbus TCP/IP demo 是一个用于展示和学习 Modbus TCP/IP 协议的示例程序,通过它可以深入了解Modbus TCP/IP协议的细节和应用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值