mikyll commented on issue #12150:
URL: https://github.com/apache/apisix/issues/12150#issuecomment-2812172723

   Hi @NandanSatheeshJupiter 
   
   I tested this on minikube and the "log" plugin is loaded correctly, in fact, 
APISIX only logs the following error:
   
   ```lang-none
   2025/04/17 08:19:59 [error] 73#73: *27 [lua] plugin.lua:144: load_plugin(): 
failed to load plugin [jwt-auth-headers] err: module 
'apisix.plugins.jwt-auth-headers' not found:
        no field package.preload['apisix.plugins.jwt-auth-headers']
        no file 
'/usr/local/apisix//deps/share/lua/5.1/apisix/plugins/jwt-auth-headers.lua'
        no file 
'/usr/local/apisix//deps/share/lua/5.1/apisix/plugins/jwt-auth-headers/init.lua'
        no file '/usr/local/apisix/apisix/plugins/jwt-auth-headers.lua'
        no file '/usr/local/apisix/apisix/plugins/jwt-auth-headers/init.lua'
        no file 
'/usr/local/openresty/site/lualib/apisix/plugins/jwt-auth-headers.ljbc'
        no file 
'/usr/local/openresty/site/lualib/apisix/plugins/jwt-auth-headers/init.ljbc'
        no file 
'/usr/local/openresty/lualib/apisix/plugins/jwt-auth-headers.ljbc'
        no file 
'/usr/local/openresty/lualib/apisix/plugins/jwt-auth-headers/init.ljbc'
        no file 
'/usr/local/openresty/site/lualib/apisix/plugins/jwt-auth-headers.lua'
        no file 
'/usr/local/openresty/site/lualib/apisix/plugins/jwt-auth-headers/init.lua'
        no file 
'/usr/local/openresty/lualib/apisix/plugins/jwt-auth-headers.lua'
        no file 
'/usr/local/openresty/lualib/apisix/plugins/jwt-auth-headers/init.lua'
        no file './apisix/plugins/jwt-auth-headers.lua'
        no file 
'/usr/local/openresty/luajit/share/luajit-2.1/apisix/plugins/jwt-auth-headers.lua'
        no file '/usr/local/share/lua/5.1/apisix/plugins/jwt-auth-headers.lua'
        no file 
'/usr/local/share/lua/5.1/apisix/plugins/jwt-auth-headers/init.lua'
        no file 
'/usr/local/openresty/luajit/share/lua/5.1/apisix/plugins/jwt-auth-headers.lua'
        no file 
'/usr/local/openresty/luajit/share/lua/5.1/apisix/plugins/jwt-auth-headers/init.lua'
        no file '/usr/local/apisix/apisix/plugins/jwt-auth-headers.lua'
        no file 
'/usr/local/apisix/deps/share/lua/5.1/apisix/plugins/jwt-auth-headers/init.lua'
        no file './apisix/plugins/jwt-auth-headers.lua'
        no file 
'/usr/local/openresty/luajit/share/luajit-2.1/apisix/plugins/jwt-auth-headers.lua'
        no file '/usr/local/share/lua/5.1/apisix/plugins/jwt-auth-headers.lua'
        no file 
'/usr/local/share/lua/5.1/apisix/plugins/jwt-auth-headers/init.lua'
        no file 
'/usr/local/openresty/luajit/share/lua/5.1/apisix/plugins/jwt-auth-headers.lua'
        no file 
'/usr/local/openresty/luajit/share/lua/5.1/apisix/plugins/jwt-auth-headers/init.lua'
        no file 
'/usr/local/openresty/site/lualib/apisix/plugins/jwt-auth-headers.ljbc'
        no file 
'/usr/local/openresty/site/lualib/apisix/plugins/jwt-auth-headers/init.ljbc'
        no file 
'/usr/local/openresty/lualib/apisix/plugins/jwt-auth-headers.ljbc'
        no file 
'/usr/local/openresty/lualib/apisix/plugins/jwt-auth-headers/init.ljbc'
        no file 
'/usr/local/openresty/site/lualib/apisix/plugins/jwt-auth-headers.lua'
        no file 
'/usr/local/openresty/site/lualib/apisix/plugins/jwt-auth-headers/init.lua'
        no file 
'/usr/local/openresty/lualib/apisix/plugins/jwt-auth-headers.lua'
        no file 
'/usr/local/openresty/lualib/apisix/plugins/jwt-auth-headers/init.lua'
        no file './apisix/plugins/jwt-auth-headers.lua'
        no file 
'/usr/local/openresty/luajit/share/luajit-2.1/apisix/plugins/jwt-auth-headers.lua'
        no file '/usr/local/share/lua/5.1/apisix/plugins/jwt-auth-headers.lua'
        no file 
'/usr/local/share/lua/5.1/apisix/plugins/jwt-auth-headers/init.lua'
        no file 
'/usr/local/openresty/luajit/share/lua/5.1/apisix/plugins/jwt-auth-headers.lua'
        no file 
'/usr/local/openresty/luajit/share/lua/5.1/apisix/plugins/jwt-auth-headers/init.lua'
        no file 
'/usr/local/apisix//deps/lib64/lua/5.1/apisix/plugins/jwt-auth-headers.so'
        no file 
'/usr/local/apisix//deps/lib/lua/5.1/apisix/plugins/jwt-auth-headers.so'
        no file 
'/usr/local/openresty/site/lualib/apisix/plugins/jwt-auth-headers.so'
        no file '/usr/local/openresty/lualib/apisix/plugins/jwt-auth-headers.so'
        no file './apisix/plugins/jwt-auth-headers.so'
        no file '/usr/local/lib/lua/5.1/apisix/plugins/jwt-auth-headers.so'
        no file 
'/usr/local/openresty/luajit/lib/lua/5.1/apisix/plugins/jwt-auth-headers.so'
        no file '/usr/local/lib/lua/5.1/loadall.so'
        no file './apisix/plugins/jwt-auth-headers.so'
        no file '/usr/local/lib/lua/5.1/apisix/plugins/jwt-auth-headers.so'
        no f
   ```
   
   This is expected, since you haven't defined "jwt-auth-headers" yet 🙂
   
   However, the reason why you're not seeing the log is caused by the following:
   
   1. Incorrect APISIX log level in `config.yaml`;
   2. "log" plugin priority.
   
   ## Issues
   
   ### 1. APISIX Log Level
   
   In your `config.yaml`, you have:
   
   ```yaml
   logger:
     level: "info"
   ```
   
   Which doesn't actually change APISIX log level. To change the log level you 
should use the following:
   
   ```yaml
   nginx_config:
     error_log_level: info
   ```
   
   However, since at "info" level, APISIX logs are _a lot_, if you only want to 
test that the plugin is working, I suggest you to change the plugin level to 
"warn" instead:
   
   ```lua
   core.log.warn("log plugin triggered!")
   ```
   
   You can have a look at 
[config.yaml.example](https://github.com/apache/apisix/blob/master/conf/config.yaml.example)
 for a more comprehensive example.
   
   ### 2. Plugin Priority
   
   Since your "log" plugin has priority `0`, when you enable it on route 
`/health`, it will **never** execute, because "serverless-pre-function" has 
higher priority (10000) and it truncates the request processing, by returning 
`200`.
   
   You could change that by:
   
   1. increasing the priority in "log" plugin:
   
       ```lua
       local _M = {
           version = 0.1,
           priority = 20000, -- Or any number > 10000
           name = plugin_name,
       }
       ```
   
   2. increasing the priority in "log" instance, using plugin metadata:
   
       ```yaml
       routes:
         - id: 100
           uri: /health
           plugins:
             log:
               _meta:
                 priority: 20000 # Or any number > 10000
             serverless-pre-function:
               phase: access
               functions:
                 - |
                   return function(conf, ctx)
                     ngx.say('APISIX is healthy')
                     ngx.exit(200)
                   end
       ```
   
   ## Full Example
   
   ```yaml
   apiVersion: v1
   kind: Namespace
   metadata:
     name: apisix
   ---
   apiVersion: v1
   kind: ConfigMap
   metadata:
     name: apisix-config
     namespace: apisix
   data:
     config.yaml: |
       apisix:
         node_listen: 9080
         enable_admin_cors: true
         admin_key:
           - name: "admin"
             key: edd1c9f034335f136f87ad84b625c8f1
             role: admin
       deployment:
         role: data_plane
         role_data_plane:
           config_provider: yaml
       plugins:
         - log
         - jwt-auth-headers
         - serverless-pre-function
         - grpc-transcode
         - limit-req
         - limit-count
         - proxy-rewrite
         - ip-restriction
         - response-rewrite
       # nginx_config:
       #   error_log_level: info
   ---
   apiVersion: v1
   kind: ConfigMap
   metadata:
     name: apisix-routes
     namespace: apisix
   data:
     apisix.yaml: |
       routes:
         - id: 100
           uri: /health
           plugins:
             log:
             serverless-pre-function:
               phase: access
               functions:
                 - |
                   return function(conf, ctx)
                     ngx.say('APISIX is healthy')
                     ngx.exit(200)
                   end
         - id: 1
           uri: /hello
           upstream:
             type: roundrobin
             nodes:
               "127.0.0.1:8080": 1
           plugins:
             jwt-auth-headers:
               header: Authorization
               query: token
               cookie: jwt 
               hide_credentials: true
               clock_skew: 60
               claims_to_headers:
                 key: X-User-Id
                 username: X-User-Role
                 iss: X-User-Email
             response-rewrite:
               headers:
                 set:
                   X-Config-Version: "v1"
               body: "Hello from APISIX v1\n"
         # Testing route
         - id: test_log
           uri: /test_log
           plugins:
             log:
               _meta:
                 priority: 30000
       #END
   ---
   apiVersion: apps/v1
   kind: Deployment
   metadata:
     name: apisix
     namespace: apisix
     annotations:
       reloader.stakater.com/auto: "true"
       configmap.reloader.stakater.com/reload: 
"apisix-config,apisix-routes,apisix-custom-plugin-log"
   spec:
     replicas: 1
     selector:
       matchLabels:
         app: apisix
     template:
       metadata:
         labels:
           app: apisix
       spec:
         containers:
         - name: apisix
           image: apache/apisix:3.12.0-debian
           imagePullPolicy: IfNotPresent
           resources:
             requests:
               cpu: 500m
               memory: 1Gi
             limits:
               cpu: 500m
               memory: 1Gi
           ports:
           - containerPort: 9080
             name: http
           - containerPort: 9443
             name: https
           - containerPort: 9180
             name: admin
           livenessProbe:
             httpGet:
               path: /health
               port: 9080
               scheme: HTTP
             initialDelaySeconds: 30
             periodSeconds: 10
             timeoutSeconds: 5
             failureThreshold: 3
           readinessProbe:
             httpGet:
               path: /health
               port: 9080
               scheme: HTTP
             initialDelaySeconds: 30
             periodSeconds: 10
             timeoutSeconds: 5
             failureThreshold: 3
           volumeMounts:
           - name: config
             mountPath: /usr/local/apisix/conf/config.yaml
             subPath: config.yaml
           - name: routes
             mountPath: /usr/local/apisix/conf/apisix.yaml
             subPath: apisix.yaml
           - name: custom-plugin-log
             mountPath: /usr/local/apisix/apisix/plugins/log.lua
             subPath: log.lua
         volumes:
         - name: config
           configMap:
             name: apisix-config
         - name: routes
           configMap:
             name: apisix-routes
         - name: custom-plugin-log
           configMap:
             name: apisix-custom-plugin-log
   ---
   apiVersion: v1
   kind: Service
   metadata:
     name: apisix
     namespace: apisix
   spec:
     type: NodePort
     ports:
     - port: 80
       targetPort: 9080
       name: http
     - port: 9180
       targetPort: 9180
       name: admin
     selector:
       app: apisix
   ---
   apiVersion: autoscaling/v2
   kind: HorizontalPodAutoscaler
   metadata:
     name: hpa
     namespace: apisix
   spec:
     scaleTargetRef:
       apiVersion: apps/v1
       kind: Deployment
       name: apisix
     maxReplicas: 10
     minReplicas: 2
     metrics:
       - type: Resource
         resource:
           name: cpu
           target:
             type: Utilization
             averageUtilization: 75
       - type: Resource
         resource:
           name: memory
           target:
             type: Utilization
             averageUtilization: 75
     behavior:
       scaleDown:
         stabilizationWindowSeconds: 120  
         policies:
         - type: Pods
           value: 1 
           periodSeconds: 30
   ---
   apiVersion: v1
   kind: ConfigMap
   metadata:
     name: apisix-custom-plugin-log
     namespace: apisix
   data:
     log.lua: |
       local core = require("apisix.core")
       
       local plugin_name = "log"
       
       local _M = {
           version = 0.1,
           priority = 0,
           name = plugin_name,
       }
       
       _M.schema = {
           type = "object",
           properties = {},
       }
       
       function _M.access(conf, ctx)
           core.log.warn("log plugin triggered!")
       end
       
       return _M
   ---
   ```
   
   Hope that helped 🙂 let me know if you still encounter issues or unexpected 
behaviour


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscr...@apisix.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to