You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TinyLog v2.6.2中IDBC Writer自定义user字段配置问询

TinyLog v2.6.2 添加全局用户自定义字段到SQL Server审计日志

针对你的需求,这里提供两种适配TinyLog v2.6.2特性的可行方案:

方案1:使用ThreadContext快速实现

因为用户值在整个实例运行期间不变,在用户登录成功后,将用户信息存入ThreadContext:

// 用户登录成功后执行此代码
ThreadContext.put("currentUser", "登录用户名");

然后在配置文件中直接引用这个上下文变量:

writer.field.user = {currentUser}

方案2:自定义FieldProvider(全局单实例场景更可靠)

如果需要更灵活的全局用户管理,可通过自定义字段提供者实现:

  1. 创建全局用户持有类,用于存储和获取当前用户:
public class UserHolder {
    private static String currentUser;

    public static void setCurrentUser(String user) {
        currentUser = user;
    }

    public static String getCurrentUser() {
        return currentUser != null ? currentUser : "unknown";
    }
}
  1. 实现TinyLog的FieldProvider接口,提供用户字段值:
import org.tinylog.core.LogEntry;
import org.tinylog.core.LogEntryValue;
import org.tinylog.provider.FieldProvider;

public class UserFieldProvider implements FieldProvider {
    @Override
    public String getValue(LogEntry logEntry) {
        return UserHolder.getCurrentUser();
    }

    @Override
    public LogEntryValue getLogEntryValue() {
        return LogEntryValue.CUSTOM;
    }
}
  1. 在配置文件中指定这个自定义提供者:
writer.field.user = com.yourpackage.UserFieldProvider

登录成功后调用UserHolder.setCurrentUser("实际用户名");即可。

关键提示

  • 两种方案都需要确保用户值在首次写入日志前完成设置,避免出现默认的"unknown"值
  • 若应用是单实例单用户模式,方案2的全局持有者更稳定;如果是多线程但单用户,两种方案均可

内容的提问来源于stack exchange,提问作者Jeremy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 00:49:54