Prologue -Webframework - 如何在使用 `--threads:on` 标志编译时设置用于日志记录的线程局部变量?
Prologue -Webframework - How to set thread-local variables for logging when compiling with `--threads:on` flag?
我正在使用网络框架序言和 ORM 规范在 nim 中编写网络应用程序。我发现当您使用 --threads:on
标志进行编译时,启动应用程序时通常出现在终端中的序言和规范的日志消息消失了。
这是因为日志消息处理程序和日志级别设置为线程局部变量,所以当创建新线程时,必须再次为该线程设置日志级别等。
但是,prologue 是实例化线程的那个,那么如何为 prologue 创建的每个线程正确设置它?
感谢prologue作者xflywind的帮助,我找到了答案。
答案是prologue-events。
当 prologue 创建一个线程时,它会触发一个在启动时注册的过程列表,即所谓的事件。您需要做的就是定义一个设置 log-level 并提供处理程序的事件。
proc setLoggingLevel() =
addHandler(newConsoleLogger())
logging.setLogFilter(lvlDebug)
let
event = initEvent(setLoggingLevel)
var
app = newApp(settings = settings, startup = @[event])
我正在使用网络框架序言和 ORM 规范在 nim 中编写网络应用程序。我发现当您使用 --threads:on
标志进行编译时,启动应用程序时通常出现在终端中的序言和规范的日志消息消失了。
这是因为日志消息处理程序和日志级别设置为线程局部变量,所以当创建新线程时,必须再次为该线程设置日志级别等。
但是,prologue 是实例化线程的那个,那么如何为 prologue 创建的每个线程正确设置它?
感谢prologue作者xflywind的帮助,我找到了答案。
答案是prologue-events。 当 prologue 创建一个线程时,它会触发一个在启动时注册的过程列表,即所谓的事件。您需要做的就是定义一个设置 log-level 并提供处理程序的事件。
proc setLoggingLevel() =
addHandler(newConsoleLogger())
logging.setLogFilter(lvlDebug)
let
event = initEvent(setLoggingLevel)
var
app = newApp(settings = settings, startup = @[event])