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);
            }
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#6
0
 public DefaultLoggerPool(string loggerPoolName)
 {
     LoggerPoolName = loggerPoolName;
     fileAppender   = new DefaultFileAppender(loggerPoolName);
 }
示例#7
0
 public DefaultLoggerPool(string loggerPoolName)
 {
     LoggerPoolName = loggerPoolName;
     fileAppender = new DefaultFileAppender(loggerPoolName);
 }