using System; using System.IO; using System.Reflection; using System.Windows; using log4net.Appender; using log4net.Config; using log4net.Layout; using Newtonsoft.Json.Linq; namespace SWS.Commons { /// /// Log使用帮助类 /// public class LoggerHelper { private static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo"); private static readonly log4net.ILog logerror = log4net.LogManager.GetLogger("logerror"); private static readonly log4net.ILog logdebug = log4net.LogManager.GetLogger("logdebug"); private static readonly log4net.ILog logwarn = log4net.LogManager.GetLogger("logwarn"); private static readonly log4net.ILog logfatal = log4net.LogManager.GetLogger("logfatal"); private static LoggerHelper _obj = null; private static string logPath = string.Empty; private LoggerHelper() { try { logPath = Path.Combine(GlobalObject.GetDllPath(), "Logs\\"); if (!Directory.Exists(logPath)) { Directory.CreateDirectory(logPath); } var configFile = new FileInfo(Path.Combine(GlobalObject.GetDllPath(), "log4net.config")); log4net.Config.XmlConfigurator.ConfigureAndWatch(configFile); } catch (Exception ex) { MessageBox.Show(ex.Message+"\n\r"+ex.ToString()); } } #region 初始 #endregion public static bool ChangeLogFileName(string name) { var path = Path.Combine(GlobalObject.GetDllPath(), "SWSLogs\\"); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } var rootRepository = log4net.LogManager.GetRepository(); foreach (var appender in rootRepository.GetAppenders()) { if (appender is log4net.Appender.FileAppender fileAppender&&!string.IsNullOrEmpty(fileAppender.File) && appender.Name.ToLower().Contains(name)) { // string filename= Path.Combine(GlobalObject.GetDllPath(),$"SWSLogs\\"); //fileAppender.Close(); fileAppender.File = path; fileAppender.ActivateOptions(); return true; } } return false; } /// /// 获取当前的日志记录对象。 /// public static LoggerHelper Current { get => _obj ?? (new LoggerHelper()); set => _obj = value; } #region Debug,调试 /// /// 调试信息输出。 /// /// 需要记录的信息。 public void Debug(string msg) { logdebug.Debug(msg); } #endregion #region Info,信息 /// /// 普通信息输出。 /// /// 需要记录的信息。 public void Info(string msg) { ChangeLogFileName("info"); loginfo.Info(msg); } #endregion #region Warn,警告 /// /// 警告级别信息输出。 /// /// 需要记录的信息。 public void Warn(string msg) { ChangeLogFileName("warn"); logwarn.Warn(msg); } #endregion #region Error,错误 /// /// 错误级别信息输出。 /// /// 需要记录的信息。 public void Error(string msg) { ChangeLogFileName("error"); logerror.Error("----------------------------Error BEGIN------------------------------"); logerror.Error(msg); logerror.Error("-----------------------------Error END-------------------------------"); } #endregion #region Fatal,致命错误 /// /// 致命错误级别信息输出。 /// /// 需要记录的信息。 /// 需要记录的系统异常。 public void Fatal(string msg) { ChangeLogFileName("fatal"); logfatal.Fatal("----------------------------Fatal BEGIN------------------------------"); logfatal.Fatal(msg); logfatal.Fatal("-----------------------------Fatal END-------------------------------"); } #endregion #region 输出json日志 /// /// 输出json日志 /// /// json方法名 /// json数据 public void WriteJson(string funName, string json) { try { //json路径文件名 Environment.ExpandEnvironmentVariables(@"%USERPROFILE%\AppData\Roaming\SWS\Logs\" string filename = Path.Combine(logPath, funName + ".json"); //判断文件是否被打开占用 if (!FileHelper.IsFileLocked(filename)) { File.Delete(filename); string strJson = string.Empty; if (json.StartsWith("[")) { //格式化json数据 当前为组类型 JArray jobj = JArray.Parse(json); strJson = jobj.ToString(); } else if (json.StartsWith("{")) { //格式化json数据 当前为类类型 JObject jobj = JObject.Parse(json); strJson = jobj.ToString(); } //创建json文件,并输出数据 FileStream fs = new FileStream(filename, FileMode.Append); StreamWriter wr = null; wr = new StreamWriter(fs); wr.WriteLine(strJson); wr.Close(); } } catch { } } #endregion } }