- 版权类型
- 原创
- 插件中文名称
- 行为日志记录器
- 插件英文名称
- BehaveLogger
- 原帖地址
- #
- 支持的核心(服务端)
- Spigot
- 其他核心
- 语言支持
- 中文(简体)
- 适配版本(Java)
- 最新版本
- 26.x
- 1.21
- 1.20
- 1.19
- 1.18
- 1.17
- 1.16
- 1.15
- 1.14
- 1.13
- 1.12
- 1.11
- 1.10
- 1.9
- 1.8
- 1.7
[MD]
## 📌 插件简介
**BehaveLogger** 是一款轻量级的 Minecraft 服务器玩家行为日志记录插件,能够全面记录服务器内玩家的各类操作行为,并将数据持久化存储到 MySQL 数据库中,方便服务器管理员进行事后查询、审计与分析。
无论是排查恶意破坏、追溯物品去向,还是统计分析玩家行为数据,BehaveLogger 都能为你提供可靠的数据支撑。
---
## ✨ 功能特性
### 🧱 方块交互记录
- 右键点击方块
- 左键点击方块
- 左键/右键点击空气
- 踩地交互(压力板等物理交互)
- 破坏方块
- 放置方块
### 📦 物品操作记录
- 拾取物品(记录物品类型与数量)
- 丢弃物品(记录物品类型与数量)
### 🖥️ 容器/GUI 操作记录
- 打开容器(记录容器类型与标题)
- 关闭容器
- 容器内点击操作(记录点击物品类型、数量、槽位索引、左键/右键/中键、是否 Shift 点击)
### 📊 详细数据记录
每条行为记录包含以下信息:
| 字段 | 说明 |
|------|------|
| `time` | 行为发生时间 |
| `server` | 服务器标识(支持多服区分) |
| `player` | 玩家名称 |
| `world` | 所在世界 |
| `action` | 行为类型 |
| `hand_type` | 主手物品类型 |
| `hand_display` | 主手物品自定义名称 |
| `p_x / p_y / p_z` | 玩家坐标 |
| `target_type` | 目标方块/物品类型 |
| `t_x / t_y / t_z` | 目标坐标 |
| `gui_type` | 容器类型 |
| `gui_title` | 容器标题 |
| `click_type` | 点击的物品类型 |
| `click_amount` | 点击的物品数量 |
| `click_index` | 点击的槽位索引 |
| `click_action` | 点击方式(左键/右键/中键) |
| `click_shift` | 是否 Shift 点击 |
| `extra` | 附加信息(如事件被取消、物品数量等) |
---
## 🏗️ 技术亮点
- **HikariCP 连接池**:使用高性能数据库连接池,连接复用,避免频繁创建/销毁连接
- **异步批量写入**:行为数据先进入内存队列,再以批量方式异步写入数据库,不阻塞主线程
- **按天分表**:每天自动创建新数据表(表名格式 `yyyy_MM_dd`),避免单表数据量过大,方便按日期查询和归档(建议单独放一个库)
- **队列溢出保护**:缓存队列最大容量 5000 条,超出时自动丢弃并告警,防止内存溢出
- **失败重试**:批量插入失败时,数据会按原顺序重新加入队列头部,确保数据不丢失
- **优雅关闭**:插件卸载时自动刷新队列中所有剩余数据,确保数据完整写入
---
## 📋 环境要求(理论)
| 项目 | 要求 |
|------|------|
| 服务端 | Bukkit / Spigot 1.7.10+ |
| Java | 1.8+ |
| 数据库 | MySQL 5.7+ / MySQL 8.x |
| 依赖 | 无需额外安装其他插件 |
实际测试版本:
- CatServer 1.12.2
- MySQL 5.7.33
- Eclipse Adoptium Java jdk-8.0.492.9-hotspot
---
## 📥 安装方法
1. 将 `BehaveLogger-x.x.x.jar` 放入服务器的 `plugins` 目录
2. 启动服务器,插件会自动生成默认配置文件
3. 关闭服务器,编辑 `plugins/BehaveLogger/config.yml` 配置数据库连接信息
4. 重新启动服务器,插件将自动创建所需的数据表
> ⚠️ 请确保 MySQL 数据库已提前创建好对应的数据库,插件不会自动创建数据库,只会自动创建表。
---
## ⚙️ 配置文件
配置文件路径:`plugins/BehaveLogger/config.yml`
```yaml
# 插件消息前缀(支持颜色代码)
pluginTitle: "§3Behave§bLogger §7§l>>> §a"
# MySQL 数据库配置
mysql:
host: "localhost" # 数据库地址
port: 3306 # 数据库端口
user: "behavelogger" # 数据库用户名
password: "behavelogger" # 数据库密码
database: "behavelogger" # 数据库名称
options: "useSSL=false&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=true"
# 服务器标识(多服环境下用于区分不同服务器)
server: "家园一区"
# 调试模式(开启后控制台会输出详细的队列状态和批量插入日志)
debug: false
```
### 配置项说明
| 配置项 | 说明 |
|--------|------|
| `pluginTitle` | 插件消息前缀,支持 Minecraft 颜色代码(§) |
| `mysql.host` | MySQL 服务器地址 |
| `mysql.port` | MySQL 服务器端口 |
| `mysql.user` | 数据库用户名 |
| `mysql.password` | 数据库密码 |
| `mysql.database` | 数据库名称(需提前创建) |
| `mysql.options` | JDBC 连接参数,默认配置了 SSL 关闭、时区、编码等 |
| `server` | 服务器标识名称,多服部署时用于区分数据来源 |
| `debug` | 调试模式开关,开启后输出队列状态、批量插入详情等日志 |
---
## 🗄️ 数据库表结构
插件会按天自动创建数据表,表名格式为 `yyyy_MM_dd`(如 `2026_05_20`)。
```sql
CREATE TABLE IF NOT EXISTS `2026_05_20` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`time` DATETIME NOT NULL,
`server` VARCHAR(255),
`player` VARCHAR(255) NOT NULL,
`world` VARCHAR(255),
`action` VARCHAR(50),
`hand_type` VARCHAR(255),
`hand_display` VARCHAR(255),
`p_x` DOUBLE,
`p_y` DOUBLE,
`p_z` DOUBLE,
`target_type` VARCHAR(255),
`t_x` DOUBLE,
`t_y` DOUBLE,
`t_z` DOUBLE,
`gui_type` VARCHAR(255),
`gui_title` VARCHAR(255),
`click_type` VARCHAR(50),
`click_amount` VARCHAR(50),
`click_index` VARCHAR(50),
`click_action` VARCHAR(255),
`click_shift` VARCHAR(10),
`extra` TEXT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```
---
## ❓ 常见问题
**Q: 插件启动后提示"数据库连接失败"怎么办?**
A: 请检查以下几点:
- MySQL 服务是否已启动
- `config.yml` 中的数据库地址、端口、用户名、密码是否正确
- 数据库是否已提前创建
- MySQL 用户是否有对应数据库的访问权限
**Q: 插件会影响服务器性能吗?**
A: 不会。插件采用异步批量写入机制,所有数据库操作都在独立线程中执行,不会阻塞服务器主线程。同时使用 HikariCP 连接池管理数据库连接,高效且稳定。
**Q: 支持多服务器部署吗?**
A: 支持。通过修改 `config.yml` 中的 `server` 字段为不同名称,即可在同一个数据库中区分来自不同服务器的数据。
**Q: 数据会丢失吗?**
A: 插件在正常关闭时会自动刷新队列中的所有数据。只有在服务器异常崩溃且队列中仍有未写入的数据时,才可能丢失少量记录。建议配合定期备份确保数据安全。
**Q: 数据量大了怎么办?**
A: 插件采用按天分表策略,每天的数据存储在独立的表中,查询时只需针对特定日期的表,性能不会受历史数据量影响。历史数据可以方便地归档或清理。
---
## 📜 版本信息
**当前最新发布版本:1.4.0**
**v1.4.0**
- 插件正式发布
- 对插件进行重构
- 修复批量插入失败时,数据按原顺序重新入队头部的问题
- 优化数据库连接池管理,提升操作效率
**v1.1 ~ v1.3**
- 多项内部优化与改进(具体变更暂未记录)
**v1.0**
- 石猴问世,版本初啼
---
## 📮 联系作者
| 项目 | 联系方式 / 说明 |
|:---|:---|
| **作者 QQ** | `1011115423` |
| **交流群** | `1104439995` |
| **版本反馈** | 欢迎反馈 1.12.2 版本的 Bug 或建议 |
| **插件定制** | 接受其他插件定制开发需求 |
[/MD]