using System; using System.Configuration; using System.IO; using System.Threading; namespace Plane.Logging { public class LocalFileLogger : Logger { private string _logDirPath = Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Plane", ConfigurationManager.AppSettings["LogEntry"] ?? AppDomain.CurrentDomain.FriendlyName, "Logs" ); private object _logLock = new object(); public LocalFileLogger() { } public LocalFileLogger(ILogger loggerToDecorate) : base(loggerToDecorate) { } private string LogDirPath { get { if (!Directory.Exists(_logDirPath)) { Directory.CreateDirectory(_logDirPath); } return _logDirPath; } } private string LogFilePath { get { return Path.Combine(LogDirPath, DateTime.Today.ToString("yyyyMMdd") + ".log"); } } public override string ReadLog() { string text = ""; if (File.Exists(LogFilePath)) text = File.ReadAllText(LogFilePath); return text; } protected override void LogCore(string message, Category category, Priority priority) { lock (_logLock) { // TODO: 林俊清,20150605,应改为不使用 AppendAllText,提高性能。 for (int i = 0; i < 5; i++) { try { File.AppendAllText(LogFilePath, BuildStandardLogEntry(message, category, priority)); break; } catch (IOException) { Thread.Sleep(100); } } } } } }