Skip to content

Instantly share code, notes, and snippets.

@Soar360
Created September 5, 2017 08:55
Show Gist options
  • Save Soar360/18161df9788d77271a5ef262f447754c to your computer and use it in GitHub Desktop.
Save Soar360/18161df9788d77271a5ef262f447754c to your computer and use it in GitHub Desktop.
解析Nginx日志
public class NginxLogParser
{
/// <summary>
/// 解析Nginx日志
/// </summary>
/// <param name="log"></param>
/// <returns></returns>
/// <remarks>
/// \x0A*,\x08\xD4\x98\x82*\xFF
/// 拆分为:
/// 0x0A
/// *
/// ,
/// 0x08
/// 0xD4
/// 0x98
/// 0x82
/// *
/// 0xFF
/// </remarks>
public byte[] Parse(string log)
{
using (var ms = new MemoryStream())
{
var state = 0;
/*
* 0:开始
* 1:转义符
* 2:x
* 3:第一个数据位
* 4:第二个数据位
*/
var buffer = new char[2];
foreach (var code in log)
{
switch (state)
{
case 0:
{
if (code == '\\')
{
state = 1;
}
else
{
ms.WriteByte((byte) code);
}
}
break;
case 1:
{
if (code == 'x')
{
state = 2;
}
else
{
throw new Exception("格式不正确");
}
}
break;
case 2:
{
buffer[0] = code;
state = 3;
}
break;
case 3:
{
buffer[1] = code;
ms.WriteByte(Convert.ToByte(new string(buffer), 16));
state = 0; //归零状态机
}
break;
}
}
return ms.ToArray();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment