예제 #1
0
        public static void LogProcessor___Valid___Works()
        {
            var tempDirectory = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());

            try
            {
                // Arrange
                var configuration = new TimeSlicedFilesLogConfig(LogInclusionKindToOriginsMaps.AnythingFromAnywhere, tempDirectory, "TestFile", TimeSpan.FromMinutes(1));
                var processor     = new TimeSlicedFilesLogWriter(configuration);

                var infoCanary  = A.Dummy <string>();
                var errorCanary = new ArgumentException(A.Dummy <string>());

                // Act
                processor.Log(infoCanary.ToLogEntry().ToLogItem(LogItemOrigin.ItsLogEntryPosted));
                processor.Log(errorCanary.ToLogEntry().ToLogItem(LogItemOrigin.ItsLogEntryPosted));

                // Assert
                var files = Directory.GetFiles(tempDirectory);
                files.Should().NotBeEmpty();
            }
            finally
            {
                if (Directory.Exists(tempDirectory))
                {
                    Directory.Delete(tempDirectory, true);
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="TimeSlicedFilesLogReader"/> class.
        /// </summary>
        /// <param name="timeSlicedFilesLogConfig">Configuration.</param>
        /// <param name="logItemSerializerFactory">Optional serializer factory; DEFAULT will be base version.</param>
        public TimeSlicedFilesLogReader(
            TimeSlicedFilesLogConfig timeSlicedFilesLogConfig,
            ISerializerFactory logItemSerializerFactory = null)
            : base(timeSlicedFilesLogConfig, logItemSerializerFactory)
        {
            this.timeSlicedFilesLogConfig = timeSlicedFilesLogConfig ?? throw new ArgumentNullException(nameof(timeSlicedFilesLogConfig));

            var logItemPropertiesLogged = this.timeSlicedFilesLogConfig.LogItemPropertiesToIncludeInLogMessage.GetIndividualFlags();

            if (logItemPropertiesLogged.Count > 1 || !logItemPropertiesLogged.Contains(LogItemPropertiesToIncludeInLogMessage.LogItemSerialization))
            {
                throw new ArgumentException(Invariant($"{nameof(TimeSlicedFilesLogReader)} is only compatible when the {nameof(TimeSlicedFilesLogConfig)} used to write the logs was configured with {nameof(timeSlicedFilesLogConfig.LogItemPropertiesToIncludeInLogMessage)} set to ONLY {LogItemPropertiesToIncludeInLogMessage.LogItemSerialization}."));
            }
        }
예제 #3
0
        public static void LogConfigurationFileConstructor___Valid___Works()
        {
            // Arrange
            var contextsToLog = LogInclusionKindToOriginsMaps.AnythingFromAnywhere;
            var directoryPath = Path.GetTempPath();
            var filePrefix    = Guid.NewGuid().ToString();
            var timeSlice     = TimeSpan.FromHours(1);

            // Act
            var actual = new TimeSlicedFilesLogConfig(contextsToLog, directoryPath, filePrefix, timeSlice);

            // Assert
            actual.Should().NotBeNull();
            actual.LogFileDirectoryPath.Should().Be(directoryPath);
            actual.FileNamePrefix.Should().Be(filePrefix);
            actual.TimeSlicePerFile.Should().Be(timeSlice);
            actual.CreateDirectoryStructureIfMissing.Should().BeTrue();
        }
예제 #4
0
        public static void ComputeFilePath___Works()
        {
            // Arrange
            var rootPath    = Path.GetTempPath();
            var config      = new TimeSlicedFilesLogConfig(LogInclusionKindToOriginsMaps.AnythingFromAnywhere, rootPath, "Application", TimeSpan.FromMinutes(90));
            var timeOne     = new DateTime(2000, 10, 10, 04, 20, 42, DateTimeKind.Utc);
            var expectedOne = Path.Combine(rootPath, "Application--2000-10-10--0300Z-0430Z.log");
            var timeTwo     = new DateTime(2010, 10, 10, 16, 20, 42, DateTimeKind.Utc);
            var expectedTwo = Path.Combine(rootPath, "Application--2010-10-10--1500Z-1630Z.log");

            // Act
            var pathOne = config.ComputeFilePath(timeOne);
            var pathTwo = config.ComputeFilePath(timeTwo);

            // Assert
            pathOne.Should().Be(expectedOne);
            pathTwo.Should().Be(expectedTwo);
        }
예제 #5
0
        public static void Writer_reader___Roundtrip___Test()
        {
            var directory = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString().ToLowerInvariant());

            try
            {
                // Arrange
                var config = new TimeSlicedFilesLogConfig(
                    LogInclusionKindToOriginsMaps.AnythingFromAnywhere,
                    directory,
                    "TestingTimeSliced",
                    TimeSpan.FromMinutes(1),
                    true,
                    LogItemPropertiesToIncludeInLogMessage.LogItemSerialization);

                var writer = new TimeSlicedFilesLogWriter(config);
                var reader = new TimeSlicedFilesLogReader(config);

                var origin     = LogItemOrigin.ItsLogEntryPosted;
                var subjectOne = "Hello";
                var subjectTwo = "Goodbye";

                // Act
                writer.Log(subjectOne.ToLogEntry().ToLogItem(origin));
                writer.Log(subjectTwo.ToLogEntry().ToLogItem(origin));
                var all = reader.ReadAll();

                // Assert
                all.Count.Should().Be(2);
                all.First().Subject.DescribedSerialization.DeserializePayloadUsingSpecificFactory(new JsonSerializerFactory()).Should().Be(subjectOne);
                all.Last().Subject.DescribedSerialization.DeserializePayloadUsingSpecificFactory(new JsonSerializerFactory()).Should().Be(subjectTwo);
            }
            finally
            {
                if (Directory.Exists(directory))
                {
                    Directory.Delete(directory, true);
                }
            }
        }
예제 #6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="TimeSlicedFilesLogWriter"/> class.
        /// </summary>
        /// <param name="timeSlicedFilesLogConfig">Configuration.</param>
        /// <param name="logItemSerializerFactory">Optional serializer factory; DEFAULT will be base version.</param>
        public TimeSlicedFilesLogWriter(
            TimeSlicedFilesLogConfig timeSlicedFilesLogConfig,
            ISerializerFactory logItemSerializerFactory = null)
            : base(timeSlicedFilesLogConfig, logItemSerializerFactory)
        {
            this.timeSlicedFilesLogConfig = timeSlicedFilesLogConfig ?? throw new ArgumentNullException(nameof(timeSlicedFilesLogConfig));

            var directoryPath = this.timeSlicedFilesLogConfig.LogFileDirectoryPath;

            if (string.IsNullOrWhiteSpace(directoryPath))
            {
                throw new ArgumentException(Invariant($"directory path from {nameof(this.timeSlicedFilesLogConfig)}.{nameof(TimeSlicedFilesLogConfig.LogFileDirectoryPath)} is null or white space"));
            }

            if (this.timeSlicedFilesLogConfig.CreateDirectoryStructureIfMissing && !Directory.Exists(directoryPath))
            {
                Directory.CreateDirectory(directoryPath);
                this.didCreateDirectory = true;
            }
            else
            {
                this.didCreateDirectory = false;
            }
        }