1

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

RFC5424说:

优先级值的计算方法是先将设施编号乘以 8,然后加上严重性的数值。

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

(X * 8) + y = [known number]

所以

If (X * 8) + Y = 134    
// I happen to know that X = 16 and Y = 6

或者

If (X * 8) + Y = 78
// What are the values of X and Y?

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

4

2 回答 2

6

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

int priorityValue = 134; // using your example
int facility = priorityValue >> 3;
int severity = priorityValue & 7;

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

int facility = priorityValue / 8;

因为我们使用的是整数,所以这应该会给你与上面的位移操作相同的结果。

于 2013-02-20T06:37:37.853 回答
0

Corey 的回答要彻底得多,不过我更喜欢 div 和 mods(C/C++):

const int priority = 134; // using your example
const int facility = priority / 8;
const int severity = priority % 8;

反过来说:

const int priority = (facility * 8) + severity;
于 2015-11-30T22:45:45.990 回答