Log解析

nginx


public class NginxLogAll
{
    [PrimaryKey,AutoIncrement]
    public long Id { get; set; }
    public string Ip { get; set; }
    public string User { get; set; }
    public string LogTime { get; set; }
    public string Method { get; set; }
    public string HttpUrl { get; set; }
    public string HttpCode { get; set; }
    public int HttpBytes { get; set; }
    public string HttpRef { get; set; }
    public string UserAgent { get; set; }
    public override string ToString()
    {
        return
            $"('{Ip}','{User}','{LogTime}','{Method}',{PostgreSqlDialectProvider.Instance.GetQuotedValue(HttpUrl)},'{HttpCode}',{HttpBytes},{PostgreSqlDialectProvider.Instance.GetQuotedValue(HttpRef)},{PostgreSqlDialectProvider.Instance.GetQuotedValue(UserAgent)})";
    }
}
private static string NginxLogPattern =
"^(?<Ip>\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}) - (?<User>.*?) (?<LogTime>\\[.*?\\+\\d{4}\\]) \"(?<Method>.*?) (?<HttpUrl>.*) HTTP/\\d\\.\\d\" (?<HttpCode>\\d+) (?<HttpBytes>\\d+) \"(?<HttpRef>.*?)\" \"(?<UserAgent>.*)\"";


int i;
while (!sr.EndOfStream)
{
    i++;
    string line = sr.ReadLine();
    if (line != null)
    {
        var m = Regex.Match(line, NginxLogPattern);
        if (m.Success)
        {
            var a=new NginxLogAll
            {
                Ip = m.Groups["Ip"].Value,
                User = m.Groups["User"].Value,
                LogTime = FormatDate(m.Groups["LogTime"].Value[1..21]),
                Method = m.Groups["Method"].Value,
                HttpUrl = m.Groups["HttpUrl"].Value,
                HttpCode = m.Groups["HttpCode"].Value,
                HttpBytes = int.Parse(m.Groups["HttpBytes"].Value),
                HttpRef = m.Groups["HttpRef"].Value,
                UserAgent = m.Groups["UserAgent"].Value,
            };
            if (
                a.HttpUrl.EndsWith(".jpg")||
                a.HttpUrl.EndsWith(".png")||
                a.HttpUrl.EndsWith(".js")||
                a.HttpUrl.EndsWith(".css")||
                a.HttpUrl.EndsWith(".ttf")||
                a.HttpUrl.EndsWith(".gif")||
                a.HttpUrl.EndsWith(".ico")
                )
            {
                continue;
            }
            //TODO:
        }else{
            //TODO:
        }
    }
}
string FormatDate(string dataString){
    string format = "dd/MMM/yyyy:HH:mm:ss";
    DateTime result = DateTime.ParseExact(dataString, format, CultureInfo.InvariantCulture);
    return result.ToString("yyyy-MM-dd HH:mm:ss");
}
posted @ 2020-07-31 10:24  月渊  阅读(154)  评论(0编辑  收藏  举报