1

我正在尝试从使用 LogChute 接口的速度 1.7 迁移。在我当前的实现中,我使用 log 方法来获取速度日志级别并比较我们自己的日志级别。请看下面的代码。

@Override
public void log(int level, String message) {
    LogLevel projLevel = null;
    switch ( level )
    {
       case LogChute.DEBUG_ID:
          projLevel = LogLevel.DEBUG ;
          break ;

       case LogChute.INFO_ID:
          projLevel = LogLevel.INFO ;
          break ;

       case LogChute.WARN_ID:
          projLevel = LogLevel.WARNING ;
          break ;

       case LogChute.ERROR_ID:
          projLevel = LogLevel.ERROR ;
          break ;

       default:
          projLevel = LogLevel.ERROR ;
          break ;
    }

    if (Log.canLog(projLevel, Const.VELOCITY_LOGGER))
    {
       Log.log(projLevel, Const.VELOCITY_LOGGER, getClass(), message,
          null);
    }

}

根据 apache velocity 2.0 文档,不推荐使用 LogChute,并且 apache velocity 正在使用 SLF4J 进行日志记录。因此,我尝试将 SLF4j-API 和 SLF4J 绑定用作 SLF4J Simple Logger 和 WebApp SLF4J Logger,但无法使用该类,因为我需要将速度日志级别与我们的自定义日志级别进行比较。所有这些都需要在运行时发生。

对于当前速度配置,我遵循以下配置,这与基于 1.7 速度配置作为 services.VelocityService.runtime.log.logsystem.class=our.package.xclassName 调用的自定义类相同。

这是文档的链接(https://velocity.apache.org/engine/1.7/developer-guide.html#configuring-logging

这些都在 2.0 版本中被删除。

有人可以帮我解决这个问题。我正在尝试升级速度。

4

1 回答 1

0

基本上,您希望能够动态设置日志级别。也许您应该将 slf4j 绑定从 slf4j-api 更改为 logback,请参阅此问题

如果你想坚持 slf4j-simple,也许你可以尝试给 Velocity 一个自定义的 slf4j 记录器实例(未测试):

public class MyCustomLogger extends org.slf4j.SimpleLogger
{
    public MyCustomLogegr(String name) { super(name); }

    protected boolean isLevelEnabled(int logLevel)
    {
        LogLevel projLevel = null;
        switch ( level )
        {
           case LogChute.DEBUG_ID:
              projLevel = LogLevel.DEBUG ;
              break ;
           case LogChute.INFO_ID:
              projLevel = LogLevel.INFO ;
              break ;
           case LogChute.WARN_ID:
              projLevel = LogLevel.WARNING ;
              break ;
           case LogChute.ERROR_ID:
              projLevel = LogLevel.ERROR ;
              break ;
           default:
              projLevel = LogLevel.ERROR ;
              break ;
        }
        return Log.canLog(projLevel, Const.VELOCITY_LOGGER);
    }
}

然后,您必须将此记录器提供给 Velocity:

VelocityEngine velocity = new VelocityEngine();
// ... other configurations
velocity.setProperty("runtime.log.instance", new MyCustomLogger());
velocity.initialize();
于 2021-01-13T01:18:46.013 回答