日志
通过 master.Logs() 访问日志视图,或通过静态方法控制日志开关。
DLL 底层运行日志通过回调推送到 master.Logs()(只读列表),主站创建时自动注册。
快速开始
// 绑定控制台输出
master.Logs().addUpdatedListener(() -> {
LogManager.LogView logs = master.Logs();
if (logs.getCount() > 0) {
System.out.println(logs.get(logs.getCount() - 1));
}
});
// 只看错误和警告
master.Logs().setFilter(LogManager.LogCategory.ERROR, LogManager.LogCategory.WARNING);
// 启用调试日志(默认关闭)
EtherCATMaster.setDebugLogging(true);
日志类别
public enum LogCategory {
ERROR(0), // 系统错误和异常
WARNING(1), // 潜在问题
MESSAGE(2), // 一般信息(状态切换等)
MAILBOX(3), // CoE/SoE/FoE/EoE 邮箱通信(默认关闭)
PDO(4), // PDO 数据变化日志(默认关闭)
DEBUG(5), // 详细调试信息(默认关闭)
LOCAL(6); // 本地日志
}
PDO 日志
PDO 日志只在 PDO 数据发生变化时输出,不会每个周期都产生日志。适合调试 PDO 映射问题。
日志视图
master.Logs()
public LogManager.LogView Logs()
实时日志视图(只读列表),由日志系统自动维护。
相关结构:
public class LogEntry {
public Date timestamp; // 日志时间戳
public LogCategory category; // 日志类别
public String message; // 日志消息内容
}
LogView 方法
getCount()(int) — 当前过滤后的日志条数get(int index)(LogEntry) — 按索引获取日志条目getAll()(List<LogEntry>) — 获取所有日志(无视过滤器)getFilteredSnapshot()(List<LogEntry>) — 获取过滤后的日志快照setFilter(LogCategory...)(void) — 设置过滤器(只显示指定类别)addUpdatedListener(Runnable)(void) — 添加更新监听器removeUpdatedListener(Runnable)(void) — 移除更新监听器
过滤
setFilter
public void setFilter(LogCategory... categories)
设置过滤器,只显示指定类别的日志。覆盖之前的过滤设置。
参数:
categories(LogCategory...) -- 要显示的日志类别
示例:
// 只看错误和警告
master.Logs().setFilter(LogManager.LogCategory.ERROR, LogManager.LogCategory.WARNING);
// 切换为只看邮箱通信(直接覆盖)
master.Logs().setFilter(LogManager.LogCategory.MAILBOX);
getAll
public List<LogEntry> getAll()
获取所有日志条目(无视过滤器)。用于导出或自定义过滤。
日志开关
Mailbox、PDO、Debug 三类日志默认关闭,需要时手动启用。
setPDOLogging
public static void setPDOLogging(boolean enable)
启用 PDO 日志。仅在 PDO 数据变化时输出,影响实时性能,慎用。
setMailboxLogging
public static void setMailboxLogging(boolean enable)
启用邮箱日志(CoE/SoE/FoE/EoE 邮箱通信日志)。
setDebugLogging
public static void setDebugLogging(boolean enable)
启用调试日志(详细调试信息)。
DLL 回调
setLogCallback
master.setLogCallback((level, message) -> {
System.out.println("[" + level + "] " + message);
});
设置底层 DLL 日志回调,接收所有 DLL 层日志消息。
setCrashCallback
master.setCrashCallback((message) -> {
System.out.println("崩溃: " + message);
});
设置崩溃回调,在 DLL 层发生致命错误时触发。
完整示例
// 1. 绑定控制台输出(实时显示所有日志)
master.Logs().addUpdatedListener(() -> {
LogManager.LogView logs = master.Logs();
if (logs.getCount() > 0) {
System.out.println(logs.get(logs.getCount() - 1));
}
});
// 2. 启用调试日志
EtherCATMaster.setDebugLogging(true);
EtherCATMaster.setMailboxLogging(true);
// 3. 过滤日志(只看错误和调试)
master.Logs().setFilter(
LogManager.LogCategory.ERROR,
LogManager.LogCategory.DEBUG);
// 4. 导出所有日志(无视过滤器)
List<LogManager.LogEntry> allLogs = master.Logs().getAll();
for (LogManager.LogEntry entry : allLogs) {
System.out.println(entry);
}
Swing / JavaFX 绑定
addUpdatedListener 在非 UI 线程触发,更新 UI 时需要同步:
// Swing
master.Logs().addUpdatedListener(() ->
SwingUtilities.invokeLater(() ->
listModel.addElement(master.Logs().get(master.Logs().getCount() - 1))));
// JavaFX
master.Logs().addUpdatedListener(() ->
Platform.runLater(() ->
logItems.add(master.Logs().get(master.Logs().getCount() - 1))));