Пример #1
0
        public void FileTarget_ArchiveNumbering_remove_correct_order()
        {
            const int maxArchiveFiles = 10;

            var tempPath = ArchiveFileNameHelper.GenerateTempPath();
            var logFile = Path.Combine(tempPath, "file.txt");
            var archiveExtension = "txt";
            try
            {
                var fileTarget = new FileTarget
                {
                    FileName = logFile,
                    ArchiveFileName = Path.Combine(tempPath, "archive", "{#}." + archiveExtension),
                    ArchiveDateFormat = "yyyy-MM-dd",
                    ArchiveAboveSize = 1000,
                    LineEnding = LineEndingMode.LF,
                    Layout = "${message}",
                    MaxArchiveFiles = maxArchiveFiles,
                    ArchiveNumbering = ArchiveNumberingMode.DateAndSequence,
                };

                SimpleConfigurator.ConfigureForTargetLogging(fileTarget, LogLevel.Debug);

                ArchiveFileNameHelper helper = new ArchiveFileNameHelper(Path.Combine(tempPath, "archive"), DateTime.Now.ToString(fileTarget.ArchiveDateFormat), archiveExtension);

                Generate1000BytesLog('a');

                for (int i = 0; i < maxArchiveFiles; i++)
                {
                    Generate1000BytesLog('a');
                    Assert.True(helper.Exists(i), string.Format("file {0} is missing", i));
                }

                for (int i = maxArchiveFiles; i < 100; i++)
                {
                    Generate1000BytesLog('b');
                    var numberToBeRemoved = i - maxArchiveFiles; // number 11, we need to remove 1 etc
                    Assert.True(!helper.Exists(numberToBeRemoved), string.Format("archive file {0} has not been removed! We are created file {1}", numberToBeRemoved, i));
                }

            }
            finally
            {
                if (File.Exists(logFile))
                    File.Delete(logFile);
                if (Directory.Exists(tempPath))
                    Directory.Delete(tempPath, true);
            }
        }
Пример #2
0
        private void FileTarget_ArchiveNumbering_DateAndSequenceTests(bool enableCompression)
        {
            const string archiveDateFormat = "yyyy-MM-dd";
            const int archiveAboveSize = 1000;

            var tempPath = ArchiveFileNameHelper.GenerateTempPath();
            var logFile = Path.Combine(tempPath, "file.txt");
            var archiveExtension = enableCompression ? "zip" : "txt";
            try
            {
                var fileTarget = WrapFileTarget(new FileTarget
                {
#if NET4_5
                    EnableArchiveFileCompression = enableCompression,
#endif
                    FileName = logFile,
                    ArchiveFileName = Path.Combine(tempPath, "archive", "{#}." + archiveExtension),
                    ArchiveDateFormat = archiveDateFormat,
                    ArchiveAboveSize = archiveAboveSize,
                    LineEnding = LineEndingMode.LF,
                    Layout = "${message}",
                    MaxArchiveFiles = 3,
                    ArchiveNumbering = ArchiveNumberingMode.DateAndSequence,
                    ArchiveEvery = FileArchivePeriod.Day
                });

                SimpleConfigurator.ConfigureForTargetLogging(fileTarget, LogLevel.Debug);

                // we emit 5 * 250 *(3 x aaa + \n) bytes
                // so that we should get a full file + 3 archives
                Generate1000BytesLog('a');
                Generate1000BytesLog('b');
                Generate1000BytesLog('c');
                Generate1000BytesLog('d');
                Generate1000BytesLog('e');

                string archiveFilename = DateTime.Now.ToString(archiveDateFormat);

                LogManager.Configuration = null;


#if NET4_5
                var assertFileContents = enableCompression ? new Action<string, string, Encoding>(AssertZipFileContents) : AssertFileContents;
#else
                var assertFileContents = new Action<string, string, Encoding>(AssertFileContents);
#endif
                ArchiveFileNameHelper helper = new ArchiveFileNameHelper(Path.Combine(tempPath, "archive"), archiveFilename, archiveExtension);

                AssertFileContents(logFile,
                    StringRepeat(250, "eee\n"),
                    Encoding.UTF8);

                assertFileContents(helper.GetFullPath(1), StringRepeat(250, "bbb\n"), Encoding.UTF8);
                assertFileContents(helper.GetFullPath(2), StringRepeat(250, "ccc\n"), Encoding.UTF8);
                assertFileContents(helper.GetFullPath(3), StringRepeat(250, "ddd\n"), Encoding.UTF8);

                Assert.False(helper.Exists(0), "First archive should have been deleted due to max archive count.");
                Assert.False(helper.Exists(4), "Fifth archive must not have been created yet.");
            }
            finally
            {
                if (File.Exists(logFile))
                    File.Delete(logFile);
                if (Directory.Exists(tempPath))
                    Directory.Delete(tempPath, true);
            }
        }