/* Sog 游戏基础库 2016 by zouwei */ using System; using System.IO; using System.Text; namespace Sog.Log { /// /// 日志文件读写操作 /// public class Logger { private string m_filePathName; private string m_LogPath; private string m_LogFileName; private int m_logLevel; //是否滚动文件,缺省滚动,运营日志可关闭 private bool m_shiftFile = true; public Logger(string logPath, string logFileName, int logLevel) { SetPathName(logPath, logFileName); m_logLevel = logLevel; } public void SetPathName(string logPath, string logFileName) { m_LogPath = logPath; m_LogFileName = logFileName; m_filePathName = m_LogPath + "/" + logFileName; try { //不存在则创建目录 if (!Directory.Exists(logPath)) { Directory.CreateDirectory(logPath); } } catch(Exception) { } } public void SetFileName(string logFileName) { m_LogFileName = logFileName; m_filePathName = m_LogPath + "/" + logFileName; } public int GetLevel() { return m_logLevel; } public void SetLevel(int logLevel) { m_logLevel = logLevel; } public void CloseShift() { m_shiftFile = false; } /// /// 不是绝对路径 /// /// public string GetFileName() { return m_LogFileName; } internal void WriteLog(int logLevel, string strLog) { string logmessage = "[" + AppTime.ServerAppTime.GetDateTime().ToString("yyyy-MM-dd HH:mm:ss.fff") + "]" + LogLevel.LevelToString(logLevel) + "|" + strLog; //补上一个回车 if(logmessage[logmessage.Length-1] != '\n') { logmessage += '\n'; } LogWriteThread.Instance.WriteLog(m_filePathName, logmessage, m_shiftFile); } internal void WriteLogNoTime(int logLevel, int frame, string strLog) { string logmessage = string.Format("[{0}]{1}|{2}", frame, LogLevel.LevelToString(logLevel), strLog); //补上一个回车 if (logmessage[logmessage.Length - 1] != '\n') { logmessage += '\n'; } LogWriteThread.Instance.WriteLog(m_filePathName, logmessage, m_shiftFile); } /// /// bill使用,写日志的时间由外部传入 /// 支持线程安全 /// /// /// public void WriteLogWithTime(DateTime time, string strLog) { string logmessage = time.ToString("yyyy-MM-dd HH:mm:ss") + "|" + strLog + "\n"; LogWriteThread.Instance.WriteLog(m_filePathName, logmessage, m_shiftFile); } /// /// TALog使用,写文件不需要打印时间 /// /// public void WriteTALog(string strLog) { string logmessage = strLog + "\r\n"; LogWriteThread.Instance.WriteLog(m_filePathName, logmessage, m_shiftFile); } public void LogByLevel(int logLevel, string strFormat, params object[] argvList) { if (logLevel >= m_logLevel) { if(OSUtils.IsWindows() == false) { //外网版本,log错误不影响逻辑 try { string strLog = string.Format(strFormat, argvList); WriteLog(logLevel, strLog); } catch(Exception ex) { WriteLog(logLevel, ex.Message); WriteLog(logLevel, ex.Source); WriteLog(logLevel, ex.StackTrace); } } else { //windows版本,为了发现问题,log错误直接异常,不继续处理了 string strLog = string.Format(strFormat, argvList); WriteLog(logLevel, strLog); } } } public void LogByLevelNoFormat(int logLevel, string strMessage) { if (logLevel >= m_logLevel) { WriteLog(logLevel, strMessage); } } public void LogTraceDetail(string strFormat, params object[] argvList) { LogByLevel(LogLevel.TraceDetail, strFormat, argvList); } public void LogTrace(string strFormat, params object[] argvList) { LogByLevel(LogLevel.Trace, strFormat, argvList); } public void LogDebug(string strFormat, params object[] argvList) { LogByLevel(LogLevel.Debug, strFormat, argvList); } public void LogError(string strFormat, params object[] argvList) { LogByLevel(LogLevel.Error, strFormat, argvList); } public void LogFatal(string strFormat, params object[] argvList) { LogByLevel(LogLevel.Fatal, strFormat, argvList); } public void LogDebugNoFormat(string strMessage) { LogByLevelNoFormat(LogLevel.Debug, strMessage); } } }