diff --git a/magic-api-spring-boot-starter/src/main/java/org/ssssssss/magicapi/spring/boot/starter/MagicAPIAutoConfiguration.java b/magic-api-spring-boot-starter/src/main/java/org/ssssssss/magicapi/spring/boot/starter/MagicAPIAutoConfiguration.java index 19714eb1..1715bd11 100644 --- a/magic-api-spring-boot-starter/src/main/java/org/ssssssss/magicapi/spring/boot/starter/MagicAPIAutoConfiguration.java +++ b/magic-api-spring-boot-starter/src/main/java/org/ssssssss/magicapi/spring/boot/starter/MagicAPIAutoConfiguration.java @@ -59,9 +59,9 @@ import org.ssssssss.magicapi.utils.ClassScanner; import org.ssssssss.magicapi.utils.Mapping; import org.ssssssss.magicapi.utils.PathUtils; import org.ssssssss.script.MagicResourceLoader; -import org.ssssssss.script.MagicScript; import org.ssssssss.script.MagicScriptEngine; import org.ssssssss.script.exception.MagicScriptRuntimeException; +import org.ssssssss.script.functions.DynamicModuleImport; import org.ssssssss.script.functions.ExtensionMethod; import org.ssssssss.script.parsing.ast.statement.AsyncCall; import org.ssssssss.script.reflection.JavaReflection; @@ -459,7 +459,7 @@ public class MagicAPIAutoConfiguration implements WebMvcConfigurer, WebSocketCon }).orElse(null) ); logger.info("注册模块:{} -> {}", "log", Logger.class); - MagicResourceLoader.addModule("log", LoggerFactory.getLogger(MagicScript.class)); + MagicResourceLoader.addModule("log", (DynamicModuleImport) context -> LoggerFactory.getLogger(context.getScriptName())); List importModules = properties.getAutoImportModuleList(); logger.info("注册模块:{} -> {}", "env", EnvModule.class); MagicResourceLoader.addModule("env", new EnvModule(environment)); diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/config/MagicFunctionManager.java b/magic-api/src/main/java/org/ssssssss/magicapi/config/MagicFunctionManager.java index c9be6e3a..16b6c9d5 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/config/MagicFunctionManager.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/config/MagicFunctionManager.java @@ -39,12 +39,14 @@ public class MagicFunctionManager { public void registerFunctionLoader() { MagicResourceLoader.addFunctionLoader((path) -> { FunctionInfo info = mappings.get(path); + String scriptName = groupServiceProvider.getScriptName(info.getId(), info.getName(), info.getPath()); if (info != null) { List parameters = info.getParameters(); return (Function) objects -> { MagicScriptContext context = MagicScriptContext.get(); try { MagicScriptContext functionContext = new MagicScriptContext(context.getRootVariables()); + functionContext.setScriptName(scriptName); MagicScriptContext.set(functionContext); if (objects != null) { for (int i = 0, len = objects.length, size = parameters.size(); i < len && i < size; i++) { diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/controller/RequestHandler.java b/magic-api/src/main/java/org/ssssssss/magicapi/controller/RequestHandler.java index 79c77f87..cb9f17c2 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/controller/RequestHandler.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/controller/RequestHandler.java @@ -353,6 +353,8 @@ public class RequestHandler extends MagicController { if (wrap != null && StringUtils.isNotBlank(wrap.toString())) { context.set(wrap.toString(), requestEntity.getParameters()); } + ApiInfo info = requestEntity.getApiInfo(); + context.setScriptName(configuration.getGroupServiceProvider().getScriptName(info.getGroupId(), info.getName(), info.getPath())); context.putMapIntoContext(requestEntity.getParameters()); context.putMapIntoContext(requestEntity.getPathVariables()); context.set(VAR_NAME_COOKIE, new CookieContext(requestEntity.getRequest())); diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/provider/GroupServiceProvider.java b/magic-api/src/main/java/org/ssssssss/magicapi/provider/GroupServiceProvider.java index 4cca5f7c..7cca1bda 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/provider/GroupServiceProvider.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/provider/GroupServiceProvider.java @@ -3,9 +3,9 @@ package org.ssssssss.magicapi.provider; import org.ssssssss.magicapi.adapter.Resource; import org.ssssssss.magicapi.model.Group; import org.ssssssss.magicapi.model.TreeNode; +import org.ssssssss.magicapi.utils.PathUtils; import java.util.List; -import java.util.Set; public interface GroupServiceProvider { @@ -67,4 +67,8 @@ public interface GroupServiceProvider { Resource getGroupResource(String groupId); List getGroupsWithoutGroups(List groupIds); + + default String getScriptName(String groupId, String name, String path) { + return PathUtils.replaceSlash("/" + getFullName(groupId) + "/" + name) + "(" + PathUtils.replaceSlash(getFullPath(groupId) + "/" + path) + ")"; + } } diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/provider/impl/DefaultMagicAPIService.java b/magic-api/src/main/java/org/ssssssss/magicapi/provider/impl/DefaultMagicAPIService.java index d0306680..449cd0fe 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/provider/impl/DefaultMagicAPIService.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/provider/impl/DefaultMagicAPIService.java @@ -121,6 +121,7 @@ public class DefaultMagicAPIService implements MagicAPIService, JsonCodeConstant MagicScriptContext newContext = new MagicScriptContext(); Map varMap = new LinkedHashMap<>(context.getRootVariables()); varMap.putAll(variables.getVariables()); + newContext.setScriptName(groupServiceProvider.getScriptName(info.getId(), info.getName(), info.getPath())); newContext.putMapIntoContext(varMap); MagicScriptContext.set(newContext); try { @@ -145,6 +146,7 @@ public class DefaultMagicAPIService implements MagicAPIService, JsonCodeConstant final MagicScriptContext magicScriptContext = MagicScriptContext.get(); MagicScriptContext scriptContext = new MagicScriptContext(); + scriptContext.setScriptName(groupServiceProvider.getScriptName(info.getGroupId(), info.getName(), info.getPath())); scriptContext.putMapIntoContext(context); SimpleScriptContext simpleScriptContext = new SimpleScriptContext(); simpleScriptContext.setAttribute(MagicScript.CONTEXT_ROOT, scriptContext, ScriptContext.ENGINE_SCOPE); @@ -189,6 +191,7 @@ public class DefaultMagicAPIService implements MagicAPIService, JsonCodeConstant throw new MagicServiceException(String.format("找不到对应函数 [%s]", path)); } MagicScriptContext scriptContext = new MagicScriptContext(context); + scriptContext.setScriptName(groupServiceProvider.getScriptName(functionInfo.getGroupId(), functionInfo.getName(), functionInfo.getPath())); scriptContext.putMapIntoContext(context); SimpleScriptContext simpleScriptContext = new SimpleScriptContext(); simpleScriptContext.setAttribute(MagicScript.CONTEXT_ROOT, scriptContext, ScriptContext.ENGINE_SCOPE);