|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469 |
- 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
- }
- }
|