我制作了一个 kamailio 服务器,它一半通过路由器工作,但不能在本地工作(是的,我知道,这很奇怪),主要问题是我什至不知道到底发生了什么以及问题是什么。看不到任何日志(我可以看到启动消息,所以我知道我正在查找正确的文件)。
第一个问题:默认情况下,kamailio 将其内容记录到
/var/log/syslog
中,但它是一个 PITA,我想更改它,以便它记录到专用文件中,例如 /tmp/kamailio.log
。我已经搜索过,但没有找到任何人这样做,这太疯狂了,配置中没有一个简单的log_file=""
。
第二个问题:除了启动消息之外,它不记录任何其他内容。我在配置中添加了
WITH_DEBUG
定义,甚至添加了我自己的 xlog()
调用,但没有记录任何消息,因此我无法调试任何内容。
我已经厌倦了让一个非常简单的 VOIP 服务器工作起来是多么复杂。
默认情况下,Kamailio 将日志消息写入syslog,这是 Unix/Linux 系统上守护程序应用程序的标准做法。但它还有一种将日志消息打印到终端的模式(标准输出/错误),这取决于 log_stderror 全局参数或 -E 命令行参数。
如果 log_stderror=no 全局参数且未提供 -E,则写入 syslog 守护进程。这取决于操作系统及其版本,syslog应用程序运行,它可以是syslogd,syslog-ng,rsyslogd或systemd-journald。
如果 syslog 应用程序配置为写入文件,您应该在 /var/log/syslog(通常在 Debian/Ubuntu 上)或 /var/log/messages(通常在 Fedora 上)中看到 Kamailio 日志消息/RedHat/openSuse)。
通过在kamailio.cfg中设置log_facility,然后更新syslog应用程序的配置以过滤设施值,Kamailio打印的日志可以转移到专用文件中,例如/var/log/kamailio .log.
例如,当使用syslogd应用程序且kamailio.cfg具有log_facility==LOG_LOCAL0时,则syslog.conf(通常位于/etc/内)需要:
local0.* -/var/log/kamailio.log
可以在 Kamailio wiki 文档中找到特定 syslog 应用程序的更多配置片段:
请注意,运行 systemd 的操作系统可能仅将日志消息保留在内存中,然后可以使用 journalctl 查看它们,例如 journalctl -u kamailio.service。还可以将操作系统配置为通过运行经典系统日志应用程序之一来写入文件。
简而言之,通过阅读 IETF 的 SIP 标准化规范(RFC3261 以及许多其他与 SIP 相关的规范),人们可以发现这根本不是一件简单的事情。电话/实时通信从来都不是容易实施和操作的东西。涵盖规范中的所有(或大部分)案例并适应全球基础设施挑战都具有一定程度的复杂性。