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); } } }
/// <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}.")); } }
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(); }
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); }
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); } } }
/// <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; } }