using System; using System.Collections.Generic; using System.Linq; using System.IO; using System.Text; using System.Windows.Forms; using NLog; using NLog.Config; using System.Diagnostics; using System.Reflection; namespace ShenTun.IcCard.Instance { public class LogHelper { private static Logger logger = LogManager.GetCurrentClassLogger(); //初始化日志类 public static object HttpContext { get; private set; } /// /// 日志状态枚举 /// private enum LogState { /// /// 用户已登录 /// NLogin, /// /// 用户未登录 /// YLogin, } /// /// 静态构造函数 /// static LogHelper() { //MessageBox.Show(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)); //初始化配置日志 LogManager.Configuration = new XmlLoggingConfiguration(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\NLog.txt"); } /// /// 日志写入通用方法(建议使用) /// /// 日志内容 /// 日志类别 /// 类别: 1.Debug /// 2.Info /// 3.Error /// 4.Fatal /// 5.Warn /// /// 登录状态 true:有用户登录信息 false 无用户登录信息 /// /// 注:默认类型为Info 可以配置其他日志 logType用于反射 规则一定要准确 /// 例: 1.默认日志 LogWriter("test log"); 正常的业务日志 /// 2.异常日志 LogWriter("test log","Fatal"); try catch 里请使用这个日志级别 /// /// public static void LogWriter(string msg, string logType = "Info", bool loginState = true) { try { string logMethod = ""; //调用者类名和方法名 if (logType == "Fatal") { StackTrace trace = new StackTrace(); //获取是哪个类来调用的 string invokerType = trace.GetFrame(1).GetMethod().DeclaringType.Name; //获取是类中的那个方法调用的 string invokerMethod = trace.GetFrame(1).GetMethod().Name; logMethod = invokerType + "." + invokerMethod + " | "; } string IP = string.Empty; //获取IP // IP = HttpContext.Current.Request.UserHostAddress; //反射执行日志方法 Type type = typeof(Logger); MethodInfo method = type.GetMethod(logType, new Type[] { typeof(string) }); if (loginState == true) { //如果是登陆状态 可以记录用户的登陆信息 比如用户名,Id等 method.Invoke(logger, new object[] { logMethod + msg + " [ " + IP + " | " + LogState.NLogin + " ]" }); } else { method.Invoke(logger, new object[] { logMethod + msg + " [ " + IP + " | " + LogState.NLogin + " ]" }); } } catch { //日志代码错误,直接记录日志 Fatal(msg); Warn(msg); } } /// /// 调试日志 /// /// 日志内容 private static void Debug(String msg) { logger.Debug(msg); } /// /// 信息日志 /// /// 日志内容 /// /// 适用大部分场景 /// 1.记录日志文件 /// private static void Info(String msg) { logger.Info(msg); } /// /// 错误日志 /// /// 日志内容 /// /// 适用异常,错误日志记录 /// 1.记录日志文件 /// private static void Error(String msg) { logger.Error(msg); } /// /// 严重致命错误日志 /// /// 日志内容 /// /// 1.记录日志文件 /// 2.控制台输出 /// private static void Fatal(String msg) { logger.Fatal(msg); } /// /// 警告日志 /// /// 日志内容 /// /// 1.记录日志文件 /// 2.发送日志邮件 /// private static void Warn(String msg) { try { logger.Warn(msg); } catch { } } } }