using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace FrmStandAloneMetering { public class logCsv { private static LogManager logManager; static logCsv() { logManager = new LogManager(); } /// /// 数据的日志文件 /// /// /// public static void WriteDataLog(string logFile, string msg) { try { logManager.WriteDataLog(logFile, msg); } catch { } } /// /// 基础的日志文件(物资、收发货单位等) /// /// /// public static void WriteBaseData(string logFile, string msg) { try { logManager.WriteBaseData(logFile, msg); } catch { } } public static void WriteLog(LogFile logFile, string msg) { try { logManager.WriteLog(logFile, msg); } catch { } } public static void WriteLog(string msg) { try { logManager.WriteLog(LogFile.Info, msg); } catch { } } public static void WriteLog(string logFile, string msg) { try { logManager.WriteLog(logFile, msg); } catch { } } } public class LogManager { private string logFileName = string.Empty; private string logPath = "Log"; private string logFileExtName = "log"; private bool writeLogTime = true; private bool logFileNameEndWithDate = true; private Encoding logFileEncoding = Encoding.UTF8; private object obj = new object(); #region 构造函数 public LogManager() { this.LogPath = "Log"; this.LogFileExtName = "csv"; this.WriteLogTime = true; this.logFileNameEndWithDate = true; this.logFileEncoding = Encoding.UTF8; } public LogManager(string logPath, string logFileExtName, bool writeLogTime) { this.LogPath = logPath; this.LogFileExtName = logFileExtName; this.WriteLogTime = writeLogTime; this.logFileNameEndWithDate = true; this.logFileEncoding = Encoding.UTF8; } #endregion #region 属性 /// /// Log 文件路径 /// public string LogPath { get { if (this.logPath == null || this.logPath == string.Empty) { //Application.StartupPath this.logPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, DateTime.Now.ToString("yyyy-MM-dd")); } return this.logPath; } set { this.logPath = value; if (this.logPath == null || this.logPath == string.Empty) { //Application.StartupPath this.logPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, DateTime.Now.ToString("yyyy-MM-dd")); } else { try { // 判断是否不是绝对路径(绝对路径里还有":") if (this.logPath.IndexOf(Path.VolumeSeparatorChar) >= 0) { /* 绝对路径 */} else { // 相对路径 this.logPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory + this.logPath, DateTime.Now.ToString("yyyy-MM-dd")); } if (!Directory.Exists(this.logPath)) Directory.CreateDirectory(this.logPath); } catch { this.logPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, DateTime.Now.ToString("yyyy-MM-dd")); } if (!this.logPath.EndsWith(@"\")) this.logPath += @"\"; } } } /// /// Log 文件扩展名 /// public string LogFileExtName { get { return this.logFileExtName; } set { this.logFileExtName = value; } } /// /// 是否在每个Log行前面添加当前时间 /// public bool WriteLogTime { get { return this.writeLogTime; } set { this.writeLogTime = value; } } /// /// 日志文件名是否带日期 /// public bool LogFileNameEndWithDate { get { return logFileNameEndWithDate; } set { logFileNameEndWithDate = value; } } /// /// 日志文件的字符编码 /// public Encoding LogFileEncoding { get { return logFileEncoding; } set { logFileEncoding = value; } } #endregion #region 公有方法 public void WriteDataLog(string logFile, string msg) { lock (obj) { try { this.LogPath = "alonData"; logFileName = string.Format("{0}{1}.{2}", this.LogPath, //文件夹带年月日时分秒 logFile, this.logFileExtName); using (StreamWriter sw = new StreamWriter(logFileName, true, logFileEncoding)) { sw.WriteLine(msg); } } catch { } } } /// /// 基础数据下载 /// /// /// public void WriteBaseData(string logFile, string msg) { lock (obj) { try { string basePath = AppDomain.CurrentDomain.BaseDirectory; logFileName = string.Format("{0}{1}.{2}", //this.LogPath, basePath + "baseData//", logFile, this.logFileExtName); using (StreamWriter sw = new StreamWriter(logFileName, true, logFileEncoding)) { sw.WriteLine(msg); } } catch(Exception exp) { string str = exp.ToString(); } } } public void WriteLog(string logFile, string msg) { lock (obj) { try { this.LogPath = "Log"; logFileName = string.Format("{0}{1}.{2}", this.LogPath, logFile, this.logFileExtName); using (StreamWriter sw = new StreamWriter(logFileName, true, logFileEncoding)) { if (writeLogTime) { sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + msg); } else { sw.WriteLine(msg); } } } catch { } } } /// /// 一个小时一个文件名,格式为:actualFirst2021090111 /// /// /// public void WriteLogHour(string logFile, string msg) { lock (obj) { try { string dateString = string.Empty; if (this.logFileNameEndWithDate || logFile.Length == 0) { dateString = DateTime.Now.ToString("yyyyMMddHH"); } this.LogPath = "Log"; logFileName = string.Format("{0}{1}{2}.{3}", this.LogPath, logFile, dateString, this.logFileExtName); using (StreamWriter sw = new StreamWriter(logFileName, true, logFileEncoding)) { if (writeLogTime) { sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + msg); } else { sw.WriteLine(msg); } } } catch { } } } public void WriteLog(LogFile logFile, string msg) { this.WriteLog(logFile.ToString(), msg); } public void WriteDataLog(LogFile logFile, string msg) { this.WriteDataLog(logFile.ToString(), msg); } public void WriteLog(string msg) { this.WriteLog(string.Empty, msg); } #endregion } public enum LogFile { Trace, Error, SQL, SQLError, Login, Info, WeChat } }