Skip to content

Commit 25d9cb9

Browse files
lobredunglas
authored andcommitted
fix: crash when using the logger outside of the a request context
1 parent 4092ecb commit 25d9cb9

File tree

1 file changed

+21
-4
lines changed

1 file changed

+21
-4
lines changed

frankenphp.go

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -660,10 +660,28 @@ func go_read_cookies(threadIndex C.uintptr_t) *C.char {
660660
return C.CString(cookie)
661661
}
662662

663+
func getLogger(threadIndex C.uintptr_t) (*slog.Logger, context.Context) {
664+
ctxHolder := phpThreads[threadIndex]
665+
if ctxHolder == nil {
666+
return globalLogger, globalCtx
667+
}
668+
669+
ctx := ctxHolder.context()
670+
if ctxHolder.handler == nil {
671+
return globalLogger, ctx
672+
}
673+
674+
fCtx := ctxHolder.frankenPHPContext()
675+
if fCtx == nil || fCtx.logger == nil {
676+
return globalLogger, ctx
677+
}
678+
679+
return fCtx.logger, ctx
680+
}
681+
663682
//export go_log
664683
func go_log(threadIndex C.uintptr_t, message *C.char, level C.int) {
665-
ctx := phpThreads[threadIndex].context()
666-
logger := phpThreads[threadIndex].frankenPHPContext().logger
684+
logger, ctx := getLogger(threadIndex)
667685

668686
m := C.GoString(message)
669687
le := syslogLevelInfo
@@ -697,8 +715,7 @@ func go_log(threadIndex C.uintptr_t, message *C.char, level C.int) {
697715

698716
//export go_log_attrs
699717
func go_log_attrs(threadIndex C.uintptr_t, message *C.zend_string, cLevel C.zend_long, cAttrs *C.zval) *C.char {
700-
ctx := phpThreads[threadIndex].context()
701-
logger := phpThreads[threadIndex].frankenPHPContext().logger
718+
logger, ctx := getLogger(threadIndex)
702719

703720
level := slog.Level(cLevel)
704721

0 commit comments

Comments
 (0)