欢迎使用 LoggingTelegram – 一个 SwiftLog 的日志后端,它通过 Telegram Bot 发送日志消息。
灵感来自并 fork 自 LoggingSlack。
LoggingTelegram 需要 Xcode 11 或带有 Swift Package Manager 的 Swift 5.2 工具链。
将 LoggingTelegram 包作为依赖项添加到您的 Package.swift
文件。
.package(url: "https://github.com/stevapple/swift-log-telegram.git", from: "0.0.1")
将 LoggingTelegram 添加到您的目标依赖项中。
.target(name: "Example", dependencies: ["LoggingTelegram"])
然后开始使用:
import LoggingTelegram
LoggingTelegram 使用 Telegram Bot API 将日志消息发送到任何 Telegram 聊天。
您可以与 BotFather 聊天以创建一个新的 bot 并获取其 API token。配置方法在此处描述。
您需要将 token 传递给 TelegramLogHandler.init
以进行设置。
您可以通过其 ID 访问聊天。 有多种方法可以获取聊天的 ID,一些方法在 此线程 中讨论。
您可以使用 TelegramGroup.id(_:Int)
创建群聊,使用 TelegramChannel.id(_:Int)
创建频道,使用 TelegramUser.id(_:Int)
创建用户聊天。
或者,您可以通过其名称创建频道:TelegramChannel.name(_:String)
,记得删除 @
前缀。
LoggingTelegram 旨在用作辅助日志后端,以将紧急日志消息直接发送到 Telegram。
您可以使用 SwiftLog 的 MultiplexLogHandler
将 LoggingTelegram 与另一个日志后端一起设置。
import Logging
import LoggingTelegram
let channel = TelegramChannel.name("test").mentioning([1, 3]).mentioning("2")
LoggingSystem.bootstrap { label in
MultiplexLogHandler([
// Setup TelegramLogHandler with your API Token and Chat instance
TelegramLogHandler(label: label, token: "Your Bot Token Here", chat: channel),
// Setup the standard logging backend to enable console logging
StreamLogHandler.standardOutput(label: label),
// Setup multiple TelegramLogHandlers
// TelegramLogHandler(label: label, token: "Your (Another) Bot Token Here", chat: TelegramGroup.id(123))
])
}
由于 SwiftLog 不支持并行日志,并且网络连接需要时间,因此 TelegramLogHandler
之后的记录器可能需要等待其 HTTP 请求。
如果要在控制台上获取精确的时间戳,您可以将 TelegramLogHandler
放在 StreamLogHandler
之后
import Logging
import LoggingTelegram
let channel = TelegramChannel.name("test").mentioning([1, 3]).mentioning("2")
LoggingSystem.bootstrap { label in
MultiplexLogHandler([
StreamLogHandler.standardOutput(label: label),
TelegramLogHandler(label: label, token: "Your Bot Token Here", chat: channel),
TelegramLogHandler(label: label, token: "Your (Another) Bot Token Here", chat: TelegramGroup.id(123))
])
}
您现在可以像往常一样使用 SwiftLog,重要的日志消息会直接发送到 Telegram。 如下面的测试代码。
import Logging
let logger = Logger(label: "com.example.ExampleApp.main")
logger.critical("Oops, something went wrong!")
Logger 将发送一条 Telegram 消息作为 bot (如果级别匹配),以及一条控制台消息,因为两个日志后端都已设置。 上面的示例给出以下输出
2020-04-07T16:05:25+0800 critical: Oops, something went wrong!
默认情况下,只有 日志级别 为 critical
的消息才会发送到 Telegram。
您可以通过设置其 logLevel
属性或使用 level
属性初始化来调整特定 TelegramLogHandler
的最小日志级别。
var handler = TelegramLogHandler(label: "test", token: "Your Bot Token Here", chat: TelegramGroup.id(123), level: .error)
// Unrecommended! Low log levels may burden the server and abuse the Telegram function
handler.logLevel = .info
您可以通过更改 telegramLogDefaultLevel
的值来更改所有 TelegramLogHandler
的默认值。
telegramLogDefaultLevel = .error
请记住,TelegramLogHandler.logLevel
属性优先于 telegramLogDefaultLevel
。
您可以提及群聊或频道中的某人,只需使用下面列出的各种 .mentioning()
API。
import LoggingTelegram
var chat = TelegramChannel.name("test")
// By TelegramUser
let users = [1,2].map { TelegramUser.id($0) }
chat = chat.mentioning(users) // Returns a new TelegramChannel instance
// You can use his username to mention a user
let user = TelegramUser.name("testme")
chat = chat.mentioning(user)
// By TelegramRawId (A more flexible alias of the "TelegramUser" version)
chat = chat.mentioning(.id(3))
chat = chat.mentioning([.name("newtest"), .id(4)])
// By User ID
chat = chat.mentioning(5)
chat = chat.mentioning([6,7,8])
// By Username
chat = chat.mentioning("test 1")
chat = chat.mentioning(["test 2", "test 3"])
简而言之,建议在创建聊天时使用链式风格
import LoggingTelegram
TelegramChannel.name("test").mentioning([.id(1), .name("2"), .id(3)])
// or
TelegramChannel.name("test").mentioning([1, 3]).mentioning("2")
为了不打扰订阅者,您可能需要将消息静音。 您可以将 mute: Bool
传递给初始化程序以使其静音
TelegramLogHandler(label: label, token: "Your Bot Token Here", chat: channel, mute: true)
被提及的用户不会被静音。
您应该了解您正在使用此软件包所做的事情。 请勿在客户端使用它来保护订阅者的信息和您的 Bot Token。