示例#1
0
        private SizeLimitedFileSink GetLatestSink()
        {
            EnsureDirectoryCreated(this.logDirectory);

            SizeLimitedLogFileInfo logFileInfo = SizeLimitedLogFileInfo.GetLatestOrNew(DateTime.UtcNow, this.logDirectory, this.logFilePrefix);

            return(new SizeLimitedFileSink(
                       this.formatter,
                       this.logDirectory,
                       new SizeLimitedLogFileDescription(logFileInfo, this.fileSizeLimitBytes, this.logFilePrefix),
                       this.encoding));
        }
        internal static SizeLimitedLogFileInfo GetLatestOrNew(DateTime date, string logDirectory, string logFilePrefix)
        {
            string pattern = $"{logFilePrefix}{date.ToString(DateFormat)}" + @"-(\d{5}).log";

            var logFileInfo = new SizeLimitedLogFileInfo(date, 1, logFilePrefix);

            foreach (var filePath in Directory.GetFiles(logDirectory))
            {
                Match match = Regex.Match(filePath, pattern);
                if (match.Success)
                {
                    var sequence = uint.Parse(match.Groups[1].Value);

                    if (sequence > logFileInfo.Sequence)
                    {
                        logFileInfo = new SizeLimitedLogFileInfo(date, sequence, logFilePrefix);
                    }
                }
            }

            return(logFileInfo);
        }