apache / apache/gravitino

[Improvement] Can't see useful error info in the lance rest server

Open
#9,510 2 comments 0 reactions 0 assignees View on GitHub
improvement
Dominant language
Java
Stars
3.2k
Forks
935
Avg merge
1d 16h
Merged PRs (30d)
298

Description

### What would you like to be improved?

Currently the log4j2.properties of the lance standalone server is as following,
I can't access any log in the lance rest server log file after the server started.

By the way, there are redundant configuration items , the configuration for the lineage makes no sense in a lance standalone server.

```
status = warn

# Log files location
property.basePath = ${sys:gravitino.log.path}
property.serverName = ${sys:gravitino.server.name}

# RollingFileAppender name, pattern, path and rollover policy
appender.rolling.type = RollingFile
appender.rolling.name = fileLogger
appender.rolling.fileName = ${basePath}/${serverName}.log
appender.rolling.filePattern = ${basePath}/${serverName}_%d{yyyyMMdd}.log.gz
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %d{yyyy-MM-dd HH:mm:ss.SSS} %level [%t] [%l] - %msg%n
appender.rolling.policies.type = Policies

# RollingFileAppender rotation policy
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size = 10MB
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval = 1
appender.rolling.policies.time.modulate = true
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.delete.type = Delete
appender.rolling.strategy.delete.basePath = ${basePath}
appender.rolling.strategy.delete.maxDepth = 10
appender.rolling.strategy.delete.ifLastModified.type = IfLastModified

# Delete all files older than 30 days
appender.rolling.strategy.delete.ifLastModified.age = 30d

## use separate file for lineage log
appender.lineage_file.type=RollingFile
appender.lineage_file.name=lineage_file
appender.lineage_file.fileName=${basePath}/gravitino_lineage.log
appender.lineage_file.filePattern=${basePath}/gravitino_lineage_%d{yyyyMMdd}.log.gz
appender.lineage_file.layout.type=PatternLayout
appender.lineage_file.layout.pattern=[%d{yyyy-MM-dd HH:mm:ss}] %m%n
appender.lineage_file.policies.type = Policies

appender.lineage_file.policies.time.type = TimeBasedTriggeringPolicy
appender.lineage_file.policies.time.interval = 1
appender.lineage_file.policies.time.modulate = true
appender.lineage_file.strategy.type = DefaultRolloverStrategy
appender.lineage_file.strategy.delete.type = Delete
appender.lineage_file.strategy.delete.basePath = ${basePath}
appender.lineage_file.strategy.delete.maxDepth = 10
appender.lineage_file.strategy.delete.ifLastModified.type = IfLastModified
appender.lineage_file.strategy.delete.ifLastModified.age = 30d

logger.lineage.name = org.apache.gravitino.lineage.sink.LineageLogSink$LineageLogger
logger.lineage.level = info
logger.lineage.appenderRef.lineage_file.ref = lineage_file
logger.lineage.additivity = false

logger.rest.name = org.apache.gravitino.server.web.rest
logger.rest.level = warn
logger.rest.appenderRef.rolling.ref = fileLogger
logger.rest.additivity = false

# Configure root logger
rootLogger.level = info
rootLogger.appenderRef.rolling.ref = fileLogger

```

```
wangdanhua@wangdanhuadeMBP charts % curl -X POST http://192.168.194.163:9101/lance/v1/namespace/lance_catalog_test2/create -H 'Content-Type: application/json' -d '{
"id": ["lance_catalog_test2"],
"mode": "create"
}'

{"error":"Catalog already exists: lance_catalog_test2","code":409,"type":"CatalogAlreadyExistsException","detail":"com.lancedb.lance.namespace.util.CommonUtil.formatCurrentStackTrace(CommonUtil.java:26)\n\torg.apache.gravitino.lance.common.ops.gravitino.GravitinoLanceNameSpaceOperations.createOrUpdateCatalog(GravitinoLanceNameSpaceOperations.java:253)\n\torg.apache.gravitino.lance.common.ops.gravitino.GravitinoLanceNameSpaceOperations.createNamespace(GravitinoLanceNameSpaceOperations.java:158)\n\torg.apache.gravitino.lance.service.rest.LanceNamespaceOperations.createNamespace(LanceNamespaceOperations.java:108)\n\tjava.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tjava.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)\n\tjava.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tjava.base/java.lang.reflect.Method.invoke(Method.java:569)\n\torg.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52)\n\torg.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:146)\n\torg.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:189)\n\torg.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:176)\n\torg.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:93)\n\torg.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:478)\n\torg.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:400)\n\torg.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:81)\n\torg.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:256)\n\torg.glassfish.jersey.internal.Errors$1.call(Errors.java:248)\n\torg.glassfish.jersey.internal.Errors$1.call(Errors.java:244)\n\torg.glassfish.jersey.internal.Errors.process(Errors.java:292)\n\torg.glassfish.jersey.internal.Errors.process(Errors.java:274)\n\torg.glassfish.jersey.internal.Errors.process(Errors.java:244)\n\torg.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265)\n\torg.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:235)\n\torg.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:684)\n\torg.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:394)\n\torg.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346)\n\torg.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:358)\n\torg.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:311)\n\torg.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205)\n\torg.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799)\n\torg.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1656)\n\torg.apache.gravitino.server.authentication.AuthenticationFilter.lambda$doFilter$0(AuthenticationFilter.java:89)\n\tjava.base/java.security.AccessController.doPrivileged(AccessController.java:712)\n\tjava.base/javax.security.auth.Subject.doAs(Subject.java:439)\n\torg.apache.gravitino.utils.PrincipalUtils.doAs(PrincipalUtils.java:44)\n\torg.apache.gravitino.server.authentication.AuthenticationFilter.doFilter(AuthenticationFilter.java:86)\n\torg.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)\n\torg.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)\n\torg.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552)\n\torg.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)\n\torg.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)\n\torg.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)\n\torg.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505)\n\torg.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)\n\torg.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)\n\torg.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)\n\torg.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)\n\torg.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)\n\torg.eclipse.jetty.server.Server.handle(Server.java:516)\n\torg.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)\n\torg.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)\n\torg.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)\n\torg.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)\n\torg.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)\n\torg.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)\n\torg.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)\n\torg.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)\n\torg.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)\n\tjava.base/java.lang.Thread.run(Thread.java:840)","instance":"lance_catalog_test2"}%
wangdanhua@wangdanhuadeMBP charts % k exec -it lance-gravitino-lance-rest-server-65b44fdd99-gcsq7 -n test -- /bin/bash
root@lance-gravitino-lance-rest-server-65b44fdd99-gcsq7:~/gravitino-lance-rest-server# ls
bin conf libs LICENSE licenses logs NOTICE README.md
root@lance-gravitino-lance-rest-server-65b44fdd99-gcsq7:~/gravitino-lance-rest-server# cd logs
root@lance-gravitino-lance-rest-server-65b44fdd99-gcsq7:~/gravitino-lance-rest-server/logs# ls
gravitino-lance-rest-server.log gravitino_lineage.log
root@lance-gravitino-lance-rest-server-65b44fdd99-gcsq7:~/gravitino-lance-rest-server/logs# cat gravitino-lance-rest-server.log
2025-12-18 10:22:47.288 INFO [main] [org.apache.gravitino.lance.server.GravitinoLanceRESTServer.main(GravitinoLanceRESTServer.java:70)] - Starting Gravitino Lance REST Server
2025-12-18 10:22:47.312 INFO [main] [org.apache.gravitino.GravitinoEnv.initializeBaseComponents(GravitinoEnv.java:180)] - Initializing Gravitino base environment...
2025-12-18 10:22:47.366 INFO [main] [org.apache.gravitino.metrics.MetricsSystem.register(MetricsSystem.java:79)] - Register jvm to metrics system
2025-12-18 10:22:47.382 INFO [main] [org.apache.gravitino.audit.AuditLogManager.init(AuditLogManager.java:47)] - Audit log is not enabled
2025-12-18 10:22:47.383 INFO [main] [org.apache.gravitino.GravitinoEnv.initializeBaseComponents(GravitinoEnv.java:184)] - Gravitino base environment is initialized.
2025-12-18 10:22:47.397 INFO [main] [org.eclipse.jetty.util.log.Log.initialized(Log.java:170)] - Logging initialized @550ms to org.eclipse.jetty.util.log.Slf4jLog
2025-12-18 10:22:47.445 INFO [main] [org.apache.gravitino.metrics.MetricsSystem.register(MetricsSystem.java:79)] - Register lance-rest-server to metrics system
2025-12-18 10:22:47.448 INFO [main] [org.apache.gravitino.lance.LanceRESTService.serviceInit(LanceRESTService.java:95)] - Initialized Lance REST service for backend gravitino
2025-12-18 10:22:47.462 INFO [main] [org.eclipse.jetty.server.Server.doStart(Server.java:375)] - jetty-9.4.51.v20230217; built: 2023-02-17T08:19:37.309Z; git: b45c405e4544384de066f814ed42ae3dceacdd49; jvm 17.0.16+8
2025-12-18 10:22:47.812 INFO [main] [org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:921)] - Started o.e.j.s.ServletContextHandler@710d89e2{/,null,AVAILABLE}
2025-12-18 10:22:47.820 INFO [main] [org.eclipse.jetty.server.AbstractConnector.doStart(AbstractConnector.java:333)] - Started ServerConnector@6438a7fe{HTTP/1.1, (http/1.1)}{0.0.0.0:9101}
2025-12-18 10:22:47.821 INFO [main] [org.eclipse.jetty.server.Server.doStart(Server.java:415)] - Started @974ms
2025-12-18 10:22:47.821 WARN [main] [org.apache.gravitino.server.web.JettyServer.start(JettyServer.java:199)] - Users would better use HTTPS to avoid token data leak.
2025-12-18 10:22:47.821 INFO [main] [org.apache.gravitino.server.web.JettyServer.start(JettyServer.java:202)] - lance-rest web server started on host 0.0.0.0 port 9101.
2025-12-18 10:22:47.821 INFO [main] [org.apache.gravitino.lance.LanceRESTService.serviceStart(LanceRESTService.java:102)] - Lance REST service started
2025-12-18 10:22:47.821 INFO [main] [org.apache.gravitino.lance.server.GravitinoLanceRESTServer.main(GravitinoLanceRESTServer.java:82)] - Done, Gravitino Lance REST server started.
root@lance-gravitino-lance-rest-server-65b44fdd99-gcsq7:~/gravitino-lance-rest-server/logs#

```

### How should we improve?

_No response_

Contributor guide

Open the contributing guide

Research direction

Start with the lance REST server's log4j2.properties configuration and the error path shown through LanceNamespaceOperations.createNamespace and LanceNamespaceOperations.createOrUpdateCatalog. Reproduce the curl request and inspect the generated server logs. Done means useful REST request errors are available in the server log and redundant lineage configuration is addressed.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
api, backend
Issue type
Feature
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.