From 25d9cb96002381fce58ffc8ca6a8562d8fcc2035 Mon Sep 17 00:00:00 2001 From: Loric Brevet Date: Fri, 19 Dec 2025 18:27:11 +0100 Subject: [PATCH] fix: crash when using the logger outside of the a request context --- frankenphp.go | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/frankenphp.go b/frankenphp.go index 74443913..693870e1 100644 --- a/frankenphp.go +++ b/frankenphp.go @@ -660,10 +660,28 @@ func go_read_cookies(threadIndex C.uintptr_t) *C.char { return C.CString(cookie) } +func getLogger(threadIndex C.uintptr_t) (*slog.Logger, context.Context) { + ctxHolder := phpThreads[threadIndex] + if ctxHolder == nil { + return globalLogger, globalCtx + } + + ctx := ctxHolder.context() + if ctxHolder.handler == nil { + return globalLogger, ctx + } + + fCtx := ctxHolder.frankenPHPContext() + if fCtx == nil || fCtx.logger == nil { + return globalLogger, ctx + } + + return fCtx.logger, ctx +} + //export go_log func go_log(threadIndex C.uintptr_t, message *C.char, level C.int) { - ctx := phpThreads[threadIndex].context() - logger := phpThreads[threadIndex].frankenPHPContext().logger + logger, ctx := getLogger(threadIndex) m := C.GoString(message) le := syslogLevelInfo @@ -697,8 +715,7 @@ func go_log(threadIndex C.uintptr_t, message *C.char, level C.int) { //export go_log_attrs func go_log_attrs(threadIndex C.uintptr_t, message *C.zend_string, cLevel C.zend_long, cAttrs *C.zval) *C.char { - ctx := phpThreads[threadIndex].context() - logger := phpThreads[threadIndex].frankenPHPContext().logger + logger, ctx := getLogger(threadIndex) level := slog.Level(cLevel)