|
- using log4net;
- using log4net.Repository;
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
-
- namespace BPASmartClient.Helper
- {
- /// <summary>
- /// 创建人:奉友福
- /// 时间:2021/11/12
- /// </summary>
- public class logHelper
- {
- #region 单例模式
- static private logHelper m_logHelperInstance = null;
- public static logHelper GetLogConfigInstance()
- {
- if (null == m_logHelperInstance)
- {
- m_logHelperInstance = new logHelper();
-
- }
- return m_logHelperInstance;
- }
- #endregion
- /// <summary>
- /// 日志显示委托
- /// </summary>
- public Action<string> InfoNotify { get; set; }
- public ILog directLogger = null;
- public log4net.Appender.RollingFileAppender directRollfileAppender = null;
- ILoggerRepository logRepos = null;
- private static bool m_isInitDirectLog = false; //是否初始化了直接写入日志文件
- private static Int32 directFileSize = 50;
- private static string directLogDir = string.Empty;
- private static string directLogFileName = string.Empty;
- //static private UAFLogHelper uafLogInstance = null;
- private LogLevel logLevel = LogLevel.ALL;
-
- /// <summary>
- /// 初始化日志
- /// </summary>
- /// <param name="path"></param>
- public static void Fun_InitLog(string path)
- {
- try
- {
- /// 设置需要的日志信息
- GetLogConfigInstance().SetConfigEnableThreadId(true);
- GetLogConfigInstance().SetConfigEnableAppDomain(true);
-
- /// 使用直接日志接口写入日志信息
- GetLogConfigInstance().SetLogLevel(LogLevel.ERROR);
- GetLogConfigInstance().SetDirectFileLogInfo(5, string.Empty);
- GetLogConfigInstance().SetDirectFileLogName("HBL.LogDir");
- if (!(GetLogConfigInstance().initDirectLogger(path)))
- {
-
- }
- }
- catch (Exception ex)
- {
- }
- }
- public void SetDirectFileLogInfo(Int32 fileSize, string logDirectory)
- {
- directFileSize = fileSize;
- directLogDir = logDirectory;
- }
-
- public void SetDirectFileLogName(string logFileName)
- {
- directLogFileName = logFileName;
- }
-
- //初始化日志实例
- public bool initDirectLogger(string loggerName)
- {
- try
- {
- logRepos = log4net.LogManager.CreateRepository(loggerName);
- //初始化记录日志到文件的 appender
- InitDirectRollFileAppender(loggerName);
-
- m_isInitDirectLog = true;
-
- return true;
- }
- catch (Exception e)
- {
- throw e;
- }
- }
-
- private void InitDirectRollFileAppender(string loggerName)
- {
- try
- {
- directLogger = LogManager.GetLogger(logRepos.Name, loggerName);
- //初始化记录日志到文件的 appender
- directRollfileAppender = new log4net.Appender.RollingFileAppender();
-
- // pattern layout
- log4net.Layout.PatternLayout layout = new log4net.Layout.PatternLayout();
- //UAFCustomDataDB.UAFCustomLayout layout = new UAFCustomDataDB.UAFCustomLayout();
- //layout.ConversionPattern = "%log_time %log_threadname %log_ip %-5level %log_domain %log_location %log_msg %log_details%n"; // pattern
-
- layout.ConversionPattern = string.Empty;
- if (LogConfig.GetLogConfigInstance().EnableDate)
- {
- layout.ConversionPattern += "%date{yyyy-MM-dd HH:mm:ss} ";
- }
-
- //级别
- layout.ConversionPattern += "%-5level ";
-
- if (LogConfig.GetLogConfigInstance().EnableAppDomain)
- {
- layout.ConversionPattern += "%a ";
- }
-
- if (LogConfig.GetLogConfigInstance().EnableThreadId)
- {
- layout.ConversionPattern += "[%t] ";
- }
-
- layout.ConversionPattern += "%m%n";
-
- layout.ActivateOptions(); // activate
-
- //directRollfileAppender.CloseFlag = false; //添加打开标志
- directRollfileAppender.Layout = layout; // layout pattern
- //directRollfileAppender.Name = "DirectLogRollFileAppender";
- directRollfileAppender.Name = loggerName;
-
- directRollfileAppender.File = string.Empty;
-
- //设置日志文件路径
- if (string.Empty == directLogDir)
- {
- directRollfileAppender.File = "LogDir\\";
- }
-
- else
- {
- if (directLogDir.EndsWith("\\"))
- {
- directRollfileAppender.File = directLogDir;
- }
- else
- {
- directRollfileAppender.File = directLogDir + "\\";
- }
- }
- //设置日志文件名字
- if (string.Empty == directLogFileName)
- {
- //获取进程Id,构造日志文件名字
- string loggerFileName = Process.GetCurrentProcess().ProcessName
- + Process.GetCurrentProcess().Id.ToString() + "_"
- + DateTime.Now.Year.ToString()
- + DateTime.Now.Month.ToString()
- + DateTime.Now.Day.ToString()
- + DateTime.Now.Hour.ToString()
- + DateTime.Now.Minute.ToString()
- + DateTime.Now.Second.ToString()
- + DateTime.Now.Millisecond.ToString() + "_";//"UAFMsgName";
- directRollfileAppender.File += loggerFileName;
- }
- else
- {
- directRollfileAppender.File += directLogFileName;
- }
-
- directRollfileAppender.AppendToFile = true; // overwrite any existin g file with the same name
- if (directFileSize <= 0)
- {
- directRollfileAppender.MaxFileSize = (50 * 1024 * 1024); // max file size - 50*1024*1024 = 50MB
- }
- else
- {
- directRollfileAppender.MaxFileSize = (directFileSize * 1024 * 1024);
- }
-
- directRollfileAppender.MaxSizeRollBackups = 50; // keep 50 files
- directRollfileAppender.ImmediateFlush = true; // flush after every append
- directRollfileAppender.Threshold = log4net.Core.Level.All;
- directRollfileAppender.DatePattern = "yyyy_M_d'.log'";
- directRollfileAppender.StaticLogFileName = false;
-
- directRollfileAppender.ActivateOptions(); // activate
-
-
-
- // add appenders
- //log4net.Config.BasicConfigurator.Configure(directRollfileAppender);
- log4net.Config.BasicConfigurator.Configure(logRepos, directRollfileAppender);
- }
- catch (Exception e)
- {
- throw e;
- }
- }
-
- //重新设置日志保存路径和文件名
- public void ReconfigLogDirAndName()
- {
- directRollfileAppender.File = string.Empty;
-
- //设置日志文件路径
- if (string.Empty == directLogDir)
- {
- directRollfileAppender.File = "LogDir\\";
- }
-
- else
- {
- if (directLogDir.EndsWith("\\"))
- {
- directRollfileAppender.File = directLogDir;
- }
- else
- {
- directRollfileAppender.File = directLogDir + "\\";
- }
- }
- //设置日志文件名字
- if (string.Empty == directLogFileName)
- {
- //获取进程Id,构造日志文件名字
- string loggerFileName = Process.GetCurrentProcess().ProcessName
- + Process.GetCurrentProcess().Id.ToString() + "_"
- + DateTime.Now.Year.ToString()
- + DateTime.Now.Month.ToString()
- + DateTime.Now.Day.ToString()
- + DateTime.Now.Hour.ToString()
- + DateTime.Now.Minute.ToString()
- + DateTime.Now.Second.ToString()
- + DateTime.Now.Millisecond.ToString() + "_";//"UAFMsgName";
- directRollfileAppender.File += loggerFileName;
- }
- else
- {
- directRollfileAppender.File += directLogFileName;
- }
-
- if (directFileSize <= 0)
- {
- directRollfileAppender.MaxFileSize = (50 * 1024 * 1024); // max file size - 50*1024*1024 = 50MB
- }
- else
- {
- directRollfileAppender.MaxFileSize = (directFileSize * 1024 * 1024);
- }
-
- directRollfileAppender.ActivateOptions(); // activate
- }
-
- public void SetLogLevel(LogLevel level)
- {
- logLevel = level;
-
- }
-
- public bool WriteLog(LogLevel level, string logMsg)
- {
- try
- {
- if (null == directLogger)
- {
- return false;
- }
-
- //if ((LogLevel.OFF == logLevel) || ((Int32)level > (Int32)logLevel /*&& LogObjectLib.LogLevel.ALL != logLevel*/))
- //{
- // return true;
- //}
-
- //调用日志接口直接写日志信息
- switch (level)
- {
- case LogLevel.FATAL:
- if (directLogger.IsFatalEnabled)
- {
- directLogger.Fatal(logMsg);
- }
- break;
- case LogLevel.ERROR:
- if (directLogger.IsErrorEnabled)
- {
- directLogger.Error(logMsg);
- }
- break;
- case LogLevel.WARN:
- if (directLogger.IsWarnEnabled)
- {
- directLogger.Warn(logMsg);
- }
- break;
- case LogLevel.INFO:
- if (directLogger.IsInfoEnabled)
- {
- directLogger.Info(logMsg);
- }
- break;
- case LogLevel.DEBUG:
- if (directLogger.IsDebugEnabled)
- {
- directLogger.Debug(logMsg);
- }
- break;
- default:
- break;
- }
- if (InfoNotify != null)
- {
- logMsg = $"{DateTime.Now.ToString("HH:mm:ss")}:{level} {logMsg} \n\r";
- InfoNotify(logMsg);
- }
- return true;
- }
- catch (Exception e)
- {
- throw e;
- }
-
-
- }
-
- //设置日志配置--app域名
- public void SetConfigEnableAppDomain(bool value)
- {
- LogConfig.GetLogConfigInstance().EnableAppDomain = value;
- }
-
- //设置日志配置--线程id
- public void SetConfigEnableThreadId(bool value)
- {
- LogConfig.GetLogConfigInstance().EnableThreadId = value;
- }
-
- public bool GetConfigEnableAppDomain()
- {
- return LogConfig.GetLogConfigInstance().EnableAppDomain;
- }
-
- public bool GetConfigEnableThreadId()
- {
- return LogConfig.GetLogConfigInstance().EnableThreadId;
- }
-
- /// <summary>
- /// 打开指定路径下文件
- /// </summary>
- public void OpenFile(string NewFileName)
- {
- Process process = new Process();
- ProcessStartInfo processStartInfo = new ProcessStartInfo(NewFileName);
- process.StartInfo = processStartInfo;
- #region 下面这段被注释掉代码(可以用来全屏打开代码)
- //建立新的系统进程
- ////System.Diagnostics.Process process = new System.Diagnostics.Process();
- //设置文件名,此处为图片的真实路径 + 文件名(需要有后缀)
- ////process.StartInfo.FileName = NewFileName;
- //此为关键部分。设置进程运行参数,此时为最大化窗口显示图片。
- ////process.StartInfo.Arguments = "rundll32.exe C://WINDOWS//system32//shimgvw.dll,ImageView_Fullscreen";
- // 此项为是否使用Shell执行程序,因系统默认为true,此项也可不设,但若设置必须为true
- process.StartInfo.UseShellExecute = true;
- #endregion
- try
- {
- process.Start();
- try
- {
- // process.WaitForExit();
- }
- catch (Exception ex)
- {
- throw ex;
- }
- }
- catch (Exception ex)
- {
- throw ex;
- }
- finally
- {
- try
- {
- if (process != null)
- {
- process.Close();
- process = null;
- }
- }
- catch { }
- }
- }
- }
-
- /// <summary>
- /// 创建人:奉友福
- /// </summary>
- public class LogConfig
- {
- private bool m_enableDate = true;
- private bool m_enableAppDomain = false;
- private bool m_enableThreadId = false;
- #region 单例模式
- static private LogConfig m_logConfigInstance = null;
- public static LogConfig GetLogConfigInstance()
- {
- if (null == m_logConfigInstance)
- {
- m_logConfigInstance = new LogConfig();
-
- }
- return m_logConfigInstance;
- }
- #endregion
- private LogConfig()
- {
-
- }
- public bool EnableDate
- {
- set
- {
- m_enableDate = value;
- }
- get { return m_enableDate; }
- }
- public bool EnableAppDomain
- {
- set
- {
- m_enableAppDomain = value;
- }
- get { return m_enableAppDomain; }
- }
- public bool EnableThreadId
- {
- set
- {
- m_enableThreadId = value;
- }
- get { return m_enableThreadId; }
- }
- }
-
- /// <summary>
- /// 创建人:奉友福
- /// 时间:2021/11/12
- /// </summary>
- public enum LogLevel
- {
- OFF = 0,
- FATAL,
- ERROR,
- WARN,
- INFO,
- DEBUG,
- ALL
- }
- }
|