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(全局单实例场景更可靠)
如果需要更灵活的全局用户管理,可通过自定义字段提供者实现:
- 创建全局用户持有类,用于存储和获取当前用户:
public class UserHolder { private static String currentUser; public static void setCurrentUser(String user) { currentUser = user; } public static String getCurrentUser() { return currentUser != null ? currentUser : "unknown"; } }
- 实现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; } }
- 在配置文件中指定这个自定义提供者:
writer.field.user = com.yourpackage.UserFieldProvider
登录成功后调用UserHolder.setCurrentUser("实际用户名");即可。
关键提示
- 两种方案都需要确保用户值在首次写入日志前完成设置,避免出现默认的"unknown"值
- 若应用是单实例单用户模式,方案2的全局持有者更稳定;如果是多线程但单用户,两种方案均可
内容的提问来源于stack exchange,提问作者Jeremy
相关产品推荐
相关产品推荐

