@@ -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
664683func 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
699717func 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