解析系统日志优先级值的算法(PRIVAL)

Cha*_*ell 1 .net c# bit-manipulation syslog

我想PRIVAL从 syslog 条目中解析信息,但我无法理解所需的算法。

RFC5424说:

Priority 值的计算方法是首先将 Facility 编号乘以 8,然后加上 Severity 的数值。

有了这个,这就是我所理解的。

(X * 8) + y = [known number]
Run Code Online (Sandbox Code Playgroud)

所以

If (X * 8) + Y = 134    
// I happen to know that X = 16 and Y = 6
Run Code Online (Sandbox Code Playgroud)

或者

If (X * 8) + Y = 78
// What are the values of X and Y?
Run Code Online (Sandbox Code Playgroud)

那么解析这些信息的合适算法是什么?

Cor*_*rey 5

根据 RFC 5424,优先级值由范围 0..23 中的设施值和范围 0..7 中的严重性值组成。给定优先级值,您可以按如下方式提取设施和严重性:

int priorityValue = 134; // using your example
int facility = priorityValue >> 3;
int severity = priorityValue & 7;
Run Code Online (Sandbox Code Playgroud)

这是priorityValue = facility * 8 + severity用于生成您在 SYSLOG 数据中看到的值的组合操作的简单反转。您还可以使用:

int facility = priorityValue / 8;
Run Code Online (Sandbox Code Playgroud)

由于我们正在处理整数,这应该会为您提供与上述位移操作相同的结果。