string GetPostfix(LogFileInfo logFile, IFileAppender fileAppender, Encoding fileEncoding, FileLogEntry entry) { if (HasPostfix(logFile, entry)) { var sb = stringBuilder; stringBuilder = null; if (sb == null) { sb = new StringBuilder(); } while (true) { BuildPostfix(sb, logFile, entry); var postfix = sb.ToString(); sb.Clear(); if (CheckLogFile(logFile, postfix, fileAppender, fileEncoding, entry)) { if (sb.Capacity > 64) { sb.Capacity = 64; } stringBuilder = sb; return(postfix); } } } else { return(null); } }
public void RemoveAppender(IFileAppender appender) { var existingAppender = this.appenders.FirstOrDefault(a => a.GetType().Name == appender.GetType().Name); if (existingAppender != null) { throw new InvalidOperationException( string.Format("No appender of type {0} is currently in use by the File Exporter.", appender.GetType().Name)); } this.appenders.Remove(existingAppender); }
public void AddAppender(IFileAppender appenderType) { var existingAppender = this.appenders.FirstOrDefault(a => a.GetType().Name == appenderType.GetType().Name); if (existingAppender != null) { throw new InvalidOperationException( string.Format("The type of appender {0} is already being used by the File Exporter.", appenderType.GetType().Name)); } this.appenders.Add(appenderType); }
private async Task WriteEntryAsync(LogFileInfo logFile, FileLogEntry entry, CancellationToken shutdownToken) { // discarding remaining entries on shutdown shutdownToken.ThrowIfCancellationRequested(); IFileAppender fileAppender = GetFileAppender(logFile); Encoding fileEncoding = GetFileEncoding(logFile, entry); var postfix = GetPostfix(logFile, fileAppender, fileEncoding, entry); var filePath = logFile.GetFilePath(postfix); var ensureBasePath = logFile.Settings.EnsureBasePath; IFileInfo fileInfo = fileAppender.FileProvider.GetFileInfo(filePath); while (true) { try { await fileAppender.AppendAllTextAsync(fileInfo, entry.Text, fileEncoding, shutdownToken).ConfigureAwait(false); return; } catch { if (ensureBasePath) { try { if (await fileAppender.EnsureDirAsync(fileInfo, shutdownToken).ConfigureAwait(false)) { await fileAppender.AppendAllTextAsync(fileInfo, entry.Text, fileEncoding, shutdownToken).ConfigureAwait(false); return; } } catch { } } } // discarding failed entry on shutdown if (Context.WriteRetryDelay > TimeSpan.Zero) { await Task.Delay(Context.WriteRetryDelay, shutdownToken).ConfigureAwait(false); } else { shutdownToken.ThrowIfCancellationRequested(); } } }
protected virtual bool CheckLogFile(LogFileInfo logFile, string postfix, IFileAppender fileAppender, Encoding fileEncoding, FileLogEntry entry) { if (logFile.Settings.MaxFileSize > 0) { var fileInfo = fileAppender.FileProvider.GetFileInfo(logFile.GetFilePath(postfix)); if (fileInfo.Exists && (fileInfo.IsDirectory || fileInfo.Length + fileEncoding.GetByteCount(entry.Text) > logFile.Settings.MaxFileSize)) { logFile.Counter++; return(false); } } return(true); }
public DefaultLoggerPool(string loggerPoolName) { LoggerPoolName = loggerPoolName; fileAppender = new DefaultFileAppender(loggerPoolName); }