LogHelper.cs 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Net;
  6. using System.Web;
  7. namespace CP.Common
  8. {
  9. public class LogHelper
  10. {
  11. //log4net日志专用
  12. public static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo");
  13. public static readonly log4net.ILog logerror = log4net.LogManager.GetLogger("logerror");
  14. public static void SetConfig()
  15. {
  16. log4net.Config.XmlConfigurator.Configure();
  17. }
  18. public static void SetConfig(FileInfo configFile)
  19. {
  20. log4net.Config.XmlConfigurator.Configure(configFile);
  21. }
  22. /// <summary>
  23. /// 普通的文件记录日志
  24. /// </summary>
  25. /// <param name="info"></param>
  26. public static void WriteLog(string info)
  27. {
  28. if (loginfo.IsInfoEnabled)
  29. {
  30. loginfo.Info(info);
  31. }
  32. }
  33. /// <summary>
  34. /// 错误日志
  35. /// </summary>
  36. /// <param name="info"></param>
  37. /// <param name="se"></param>
  38. public static void WriteLog(string info, Exception se)
  39. {
  40. if (logerror.IsErrorEnabled)
  41. {
  42. logerror.Error(info, se);
  43. }
  44. }
  45. }
  46. /// <summary>
  47. /// 系统错误信息
  48. /// </summary>
  49. public class ErrorMessage
  50. {
  51. public ErrorMessage()
  52. {
  53. }
  54. public ErrorMessage(Exception ex, string type)
  55. {
  56. MsgType = ex.GetType().Name;
  57. Message = ex.InnerException != null ? ex.InnerException.Message : ex.Message;
  58. StackTrace = ex.StackTrace;
  59. Source = ex.Source;
  60. Time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  61. Assembly = ex.TargetSite.Module.Assembly.FullName;
  62. Method = ex.TargetSite.Name;
  63. Type = type;
  64. DotNetVersion = Environment.Version.Major + "." + Environment.Version.Minor + "." + Environment.Version.Build + "." + Environment.Version.Revision;
  65. DotNetBit = (Environment.Is64BitProcess ? "64" : "32") + "位";
  66. OSVersion = Environment.OSVersion.ToString();
  67. CPUCount = Environment.GetEnvironmentVariable("NUMBER_OF_PROCESSORS");
  68. CPUType = Environment.GetEnvironmentVariable("PROCESSOR_IDENTIFIER");
  69. OSBit = (Environment.Is64BitOperatingSystem ? "64" : "32") + "位";
  70. var request = HttpContext.Current.Request;
  71. IP = GetIpAddr(request) + ":" + request.Url.Port;
  72. IISVersion = request.ServerVariables["SERVER_SOFTWARE"];
  73. UserAgent = request.UserAgent;
  74. Path = request.Path;
  75. HttpMethod = request.HttpMethod;
  76. }
  77. /// <summary>
  78. /// 消息类型
  79. /// </summary>
  80. public string MsgType { get; set; }
  81. /// <summary>
  82. /// 消息内容
  83. /// </summary>
  84. public string Message { get; set; }
  85. /// <summary>
  86. /// 请求路径
  87. /// </summary>
  88. public string Path { get; set; }
  89. /// <summary>
  90. /// 程序集名称
  91. /// </summary>
  92. public string Assembly { get; set; }
  93. /// <summary>
  94. /// 异常参数
  95. /// </summary>
  96. public string ActionArguments { get; set; }
  97. /// <summary>
  98. /// 请求类型
  99. /// </summary>
  100. public string HttpMethod { get; set; }
  101. /// <summary>
  102. /// 异常堆栈
  103. /// </summary>
  104. public string StackTrace { get; set; }
  105. /// <summary>
  106. /// 异常源
  107. /// </summary>
  108. public string Source { get; set; }
  109. /// <summary>
  110. /// 服务器IP 端口
  111. /// </summary>
  112. public string IP { get; set; }
  113. /// <summary>
  114. /// 客户端浏览器标识
  115. /// </summary>
  116. public string UserAgent { get; set; }
  117. /// <summary>
  118. /// .NET解释引擎版本
  119. /// </summary>
  120. public string DotNetVersion { get; set; }
  121. /// <summary>
  122. /// 应用程序池位数
  123. /// </summary>
  124. public string DotNetBit { get; set; }
  125. /// <summary>
  126. /// 操作系统类型
  127. /// </summary>
  128. public string OSVersion { get; set; }
  129. /// <summary>
  130. /// 操作系统位数
  131. /// </summary>
  132. public string OSBit { get; set; }
  133. /// <summary>
  134. /// CPU个数
  135. /// </summary>
  136. public string CPUCount { get; set; }
  137. /// <summary>
  138. /// CPU类型
  139. /// </summary>
  140. public string CPUType { get; set; }
  141. /// <summary>
  142. /// IIS版本
  143. /// </summary>
  144. public string IISVersion { get; set; }
  145. /// <summary>
  146. /// 请求地址类型
  147. /// </summary>
  148. public string Type { get; set; }
  149. /// <summary>
  150. /// 是否显示异常界面
  151. /// </summary>
  152. public bool ShowException { get; set; }
  153. /// <summary>
  154. /// 异常发生时间
  155. /// </summary>
  156. public string Time { get; set; }
  157. /// <summary>
  158. /// 异常发生方法
  159. /// </summary>
  160. public string Method { get; set; }
  161. //这段代码用户请求真实IP
  162. private static string GetIpAddr(HttpRequest request)
  163. {
  164. //HTTP_X_FORWARDED_FOR
  165. string ipAddress = request.ServerVariables["x-forwarded-for"];
  166. if (!IsEffectiveIP(ipAddress))
  167. {
  168. ipAddress = request.ServerVariables["Proxy-Client-IP"];
  169. }
  170. if (!IsEffectiveIP(ipAddress))
  171. {
  172. ipAddress = request.ServerVariables["WL-Proxy-Client-IP"];
  173. }
  174. if (!IsEffectiveIP(ipAddress))
  175. {
  176. ipAddress = request.ServerVariables["Remote_Addr"];
  177. if (ipAddress.Equals("127.0.0.1") || ipAddress.Equals("::1"))
  178. {
  179. // 根据网卡取本机配置的IP
  180. IPAddress[] AddressList = Dns.GetHostEntry(Dns.GetHostName()).AddressList;
  181. foreach (IPAddress _IPAddress in AddressList)
  182. {
  183. if (_IPAddress.AddressFamily.ToString() == "InterNetwork")
  184. {
  185. ipAddress = _IPAddress.ToString();
  186. break;
  187. }
  188. }
  189. }
  190. }
  191. // 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
  192. if (ipAddress != null && ipAddress.Length > 15)
  193. {
  194. if (ipAddress.IndexOf(",") > 0)
  195. {
  196. ipAddress = ipAddress.Substring(0, ipAddress.IndexOf(","));
  197. }
  198. }
  199. return ipAddress;
  200. }
  201. /// <summary>
  202. /// 是否有效IP地址
  203. /// </summary>
  204. /// <param name="ipAddress">IP地址</param>
  205. /// <returns>bool</returns>
  206. private static bool IsEffectiveIP(string ipAddress)
  207. {
  208. return !(string.IsNullOrEmpty(ipAddress) || "unknown".Equals(ipAddress, StringComparison.OrdinalIgnoreCase));
  209. }
  210. }
  211. }