forked from anjoy8/Blog.Core
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathIpLogMiddleware.cs
More file actions
141 lines (126 loc) · 3.25 KB
/
IpLogMiddleware.cs
File metadata and controls
141 lines (126 loc) · 3.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
using Blog.Core.Common;
using Blog.Core.Common.LogHelper;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Newtonsoft.Json;
using System;
using System.Threading.Tasks;
namespace Blog.Core.Extensions.Middlewares
{
/// <summary>
/// 中间件
/// 记录IP请求数据
/// </summary>
public class IpLogMiddleware
{
/// <summary>
///
/// </summary>
private readonly RequestDelegate _next;
private readonly IWebHostEnvironment _environment;
/// <summary>
///
/// </summary>
/// <param name="next"></param>
public IpLogMiddleware(RequestDelegate next, IWebHostEnvironment environment)
{
_next = next;
_environment = environment;
}
public async Task InvokeAsync(HttpContext context)
{
if (AppSettings.app("Middleware", "IPLog", "Enabled").ObjToBool())
{
// 过滤,只有接口
if (context.Request.Path.Value.Contains("api"))
{
context.Request.EnableBuffering();
// 存储请求数据
var request = context.Request;
var requestInfo = JsonConvert.SerializeObject(new RequestInfo()
{
Ip = GetClientIP(context),
Url = request.Path.ObjToString().TrimEnd('/').ToLower(),
Datetime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
Date = DateTime.Now.ToString("yyyy-MM-dd"),
Week = GetWeek(),
});
if (!string.IsNullOrEmpty(requestInfo))
{
// 自定义log输出
Parallel.For(0, 1, e =>
{
//LogLock.OutSql2Log("RequestIpInfoLog", new string[] { requestInfo + "," }, false);
LogLock.OutLogAOP("RequestIpInfoLog", context.TraceIdentifier,
new string[] {requestInfo.GetType().ToString(), requestInfo}, false);
});
//try
//{
// var testLogMatchRequestInfo = JsonConvert.DeserializeObject<RequestInfo>(requestInfo);
// if (testLogMatchRequestInfo != null)
// {
// var logFileName = FileHelper.GetAvailableFileNameWithPrefixOrderSize(_environment.ContentRootPath, "RequestIpInfoLog");
// SerilogServer.WriteLog(logFileName, new string[] { requestInfo + "," }, false, "", true);
// }
//}
//catch (Exception e)
//{
// log.Error(requestInfo + "\r\n" + e.GetBaseException().ToString());
//}
request.Body.Position = 0;
}
await _next(context);
}
else
{
await _next(context);
}
}
else
{
await _next(context);
}
}
private string GetWeek()
{
string week = string.Empty;
switch (DateTime.Now.DayOfWeek)
{
case DayOfWeek.Monday:
week = "周一";
break;
case DayOfWeek.Tuesday:
week = "周二";
break;
case DayOfWeek.Wednesday:
week = "周三";
break;
case DayOfWeek.Thursday:
week = "周四";
break;
case DayOfWeek.Friday:
week = "周五";
break;
case DayOfWeek.Saturday:
week = "周六";
break;
case DayOfWeek.Sunday:
week = "周日";
break;
default:
week = "N/A";
break;
}
return week;
}
public static string GetClientIP(HttpContext context)
{
var ip = context.Request.Headers["X-Forwarded-For"].ObjToString();
if (string.IsNullOrEmpty(ip))
{
ip = context.Connection.RemoteIpAddress.ObjToString();
}
return ip;
}
}
}