122 lines
4.2 KiB
C#
122 lines
4.2 KiB
C#
// Copyright (c) .NET Foundation. All rights reserved.
|
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
|
|
|
using System;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using Xunit;
|
|
|
|
namespace Microsoft.Extensions.Logging.AzureAppServices.Test
|
|
{
|
|
public class FileLoggerTests: IDisposable
|
|
{
|
|
DateTimeOffset _timestampOne = new DateTimeOffset(2016, 05, 04, 03, 02, 01, TimeSpan.Zero);
|
|
|
|
public FileLoggerTests()
|
|
{
|
|
TempPath = Path.GetTempFileName() + "_";
|
|
}
|
|
|
|
public string TempPath { get; }
|
|
|
|
public void Dispose()
|
|
{
|
|
try
|
|
{
|
|
if (Directory.Exists(TempPath))
|
|
{
|
|
Directory.Delete(TempPath, true);
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
// ignored
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
public async Task WritesToTextFile()
|
|
{
|
|
var provider = new TestFileLoggerProvider(TempPath);
|
|
var logger = (BatchingLogger)provider.CreateLogger("Cat");
|
|
|
|
await provider.IntervalControl.Pause;
|
|
|
|
logger.Log(_timestampOne, LogLevel.Information, 0, "Info message", null, (state, ex) => state);
|
|
logger.Log(_timestampOne.AddHours(1), LogLevel.Error, 0, "Error message", null, (state, ex) => state);
|
|
|
|
provider.IntervalControl.Resume();
|
|
await provider.IntervalControl.Pause;
|
|
|
|
Assert.Equal(
|
|
"2016-05-04 03:02:01.000 +00:00 [Information] Cat: Info message" + Environment.NewLine +
|
|
"2016-05-04 04:02:01.000 +00:00 [Error] Cat: Error message" + Environment.NewLine,
|
|
File.ReadAllText(Path.Combine(TempPath, "LogFile.20160504.txt")));
|
|
}
|
|
|
|
[Fact]
|
|
public async Task RollsTextFile()
|
|
{
|
|
var provider = new TestFileLoggerProvider(TempPath);
|
|
var logger = (BatchingLogger)provider.CreateLogger("Cat");
|
|
|
|
await provider.IntervalControl.Pause;
|
|
|
|
logger.Log(_timestampOne, LogLevel.Information, 0, "Info message", null, (state, ex) => state);
|
|
logger.Log(_timestampOne.AddDays(1), LogLevel.Error, 0, "Error message", null, (state, ex) => state);
|
|
|
|
provider.IntervalControl.Resume();
|
|
await provider.IntervalControl.Pause;
|
|
|
|
Assert.Equal(
|
|
"2016-05-04 03:02:01.000 +00:00 [Information] Cat: Info message" + Environment.NewLine,
|
|
File.ReadAllText(Path.Combine(TempPath, "LogFile.20160504.txt")));
|
|
|
|
Assert.Equal(
|
|
"2016-05-05 03:02:01.000 +00:00 [Error] Cat: Error message" + Environment.NewLine,
|
|
File.ReadAllText(Path.Combine(TempPath, "LogFile.20160505.txt")));
|
|
}
|
|
|
|
[Fact]
|
|
public async Task RespectsMaxFileCount()
|
|
{
|
|
Directory.CreateDirectory(TempPath);
|
|
File.WriteAllText(Path.Combine(TempPath, "randomFile.txt"), "Text");
|
|
|
|
var provider = new TestFileLoggerProvider(TempPath, maxRetainedFiles: 5);
|
|
var logger = (BatchingLogger)provider.CreateLogger("Cat");
|
|
|
|
await provider.IntervalControl.Pause;
|
|
var timestamp = _timestampOne;
|
|
|
|
for (int i = 0; i < 10; i++)
|
|
{
|
|
logger.Log(timestamp, LogLevel.Information, 0, "Info message", null, (state, ex) => state);
|
|
logger.Log(timestamp.AddHours(1), LogLevel.Error, 0, "Error message", null, (state, ex) => state);
|
|
|
|
timestamp = timestamp.AddDays(1);
|
|
}
|
|
|
|
provider.IntervalControl.Resume();
|
|
await provider.IntervalControl.Pause;
|
|
|
|
var actualFiles = new DirectoryInfo(TempPath)
|
|
.GetFiles()
|
|
.Select(f => f.Name)
|
|
.OrderBy(f => f)
|
|
.ToArray();
|
|
|
|
Assert.Equal(6, actualFiles.Length);
|
|
Assert.Equal(new[] {
|
|
"LogFile.20160509.txt",
|
|
"LogFile.20160510.txt",
|
|
"LogFile.20160511.txt",
|
|
"LogFile.20160512.txt",
|
|
"LogFile.20160513.txt",
|
|
"randomFile.txt"
|
|
}, actualFiles);
|
|
}
|
|
}
|
|
}
|