diff --git a/.gitignore b/.gitignore index 0ced0ba..0bb311c 100644 --- a/.gitignore +++ b/.gitignore @@ -196,3 +196,6 @@ FakesAssemblies/ *.opt project.lock.json + +#Test files +*.txt \ No newline at end of file diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..d70d01d --- /dev/null +++ b/.travis.yml @@ -0,0 +1,11 @@ +language: csharp + +matrix: + include: + - os: linux + dist: trusty + sudo: required + dotnet: 2.1.4 + group: edge +script: + - ./build.sh \ No newline at end of file diff --git a/appveyor.yml b/appveyor.yml index f17ab19..467d351 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -2,12 +2,6 @@ version: '{build}' skip_tags: true image: Visual Studio 2017 configuration: Release -install: - - ps: mkdir -Force ".\build\" | Out-Null - - ps: Invoke-WebRequest "https://raw.githubusercontent.com/dotnet/cli/rel/1.0.0/scripts/obtain/dotnet-install.ps1" -OutFile ".\build\installcli.ps1" - - ps: $env:DOTNET_INSTALL_DIR = "$pwd\.dotnetcli" - - ps: '& .\build\installcli.ps1 -InstallDir "$env:DOTNET_INSTALL_DIR" -NoPath -Version 1.0.1' - - ps: $env:Path = "$env:DOTNET_INSTALL_DIR;$env:Path" build_script: - ps: ./Build.ps1 test: off diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..27b2e5e --- /dev/null +++ b/build.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +set -e +dotnet --info +dotnet restore + +for path in src/**/*.csproj; do + dotnet build -f netstandard1.6 -c Release ${path} +done + +for path in test/*.Tests/*.csproj; do + dotnet test -f netcoreapp2.0 -c Release ${path} +done + +cd sample/Sample/ +dotnet build -f netcoreapp2.0 -c Release +dotnet bin/Release/netcoreapp2.0/Sample.dll --run-once diff --git a/sample/Sample/Program.cs b/sample/Sample/Program.cs index 95e6989..be63efb 100644 --- a/sample/Sample/Program.cs +++ b/sample/Sample/Program.cs @@ -3,7 +3,7 @@ using Microsoft.Extensions.Configuration; using Serilog; using System.IO; - +using System.Linq; using Serilog.Core; using Serilog.Events; @@ -22,6 +22,8 @@ public static void Main(string[] args) .ReadFrom.Configuration(configuration) .CreateLogger(); + logger.Information("Args: {a}", args); + do { logger.ForContext().Information("Hello, world!"); @@ -32,7 +34,7 @@ public static void Main(string[] args) Console.WriteLine(); } - while (Console.ReadKey().KeyChar != 'q'); + while (!args.Contains("--run-once") && (Console.ReadKey().KeyChar != 'q')); } } diff --git a/sample/Sample/Sample.csproj b/sample/Sample/Sample.csproj index a7ec218..69e0e28 100644 --- a/sample/Sample/Sample.csproj +++ b/sample/Sample/Sample.csproj @@ -1,7 +1,7 @@  - net46;netcoreapp1.0 + net46;netcoreapp2.0 Exe @@ -23,4 +23,10 @@ + + + PreserveNewest + + + diff --git a/sample/Sample/appsettings.json b/sample/Sample/appsettings.json index 8ac80fe..db91572 100644 --- a/sample/Sample/appsettings.json +++ b/sample/Sample/appsettings.json @@ -17,7 +17,7 @@ "Name": "Console", "Args": { "outputTemplate": "[{Timestamp:HH:mm:ss} {SourceContext} [{Level}] {Message}{NewLine}{Exception}", - "theme": "Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme::Code, Serilog.Sinks.Console" + "theme": "Serilog.Sinks.SystemConsole.Themes.SystemConsoleTheme::Grayscale, Serilog.Sinks.Console" } } ] @@ -58,4 +58,4 @@ } ] } -} \ No newline at end of file +} diff --git a/src/Serilog.Settings.Configuration/Settings/Configuration/ConfigurationReader.cs b/src/Serilog.Settings.Configuration/Settings/Configuration/ConfigurationReader.cs index 1a58212..8b50e08 100644 --- a/src/Serilog.Settings.Configuration/Settings/Configuration/ConfigurationReader.cs +++ b/src/Serilog.Settings.Configuration/Settings/Configuration/ConfigurationReader.cs @@ -329,7 +329,7 @@ internal static IList FindSinkConfigurationMethods(IReadOnlyCollecti { var found = FindConfigurationMethods(configurationAssemblies, typeof(LoggerSinkConfiguration)); if (configurationAssemblies.Contains(typeof(LoggerSinkConfiguration).GetTypeInfo().Assembly)) - found.Add(GetSurrogateConfigurationMethod, LoggingLevelSwitch>((c, a, s) => Logger(c, a, s))); + found.Add(GetSurrogateConfigurationMethod, LoggingLevelSwitch>((c, a, s) => Logger(c, a, LevelAlias.Minimum, s))); return found; } @@ -380,8 +380,12 @@ internal static LoggerConfiguration FromLogContext(LoggerEnrichmentConfiguration => loggerEnrichmentConfiguration.FromLogContext(); // Unlike the other configuration methods, Logger is an instance method rather than an extension. - internal static LoggerConfiguration Logger(LoggerSinkConfiguration loggerSinkConfiguration, Action configureLogger, LoggingLevelSwitch restrictedToMinimumLevel = null) - => loggerSinkConfiguration.Logger(configureLogger, levelSwitch: restrictedToMinimumLevel); + internal static LoggerConfiguration Logger( + LoggerSinkConfiguration loggerSinkConfiguration, + Action configureLogger, + LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum, + LoggingLevelSwitch levelSwitch = null) + => loggerSinkConfiguration.Logger(configureLogger, restrictedToMinimumLevel, levelSwitch); internal static MethodInfo GetSurrogateConfigurationMethod(Expression> method) => (method.Body as MethodCallExpression)?.Method; diff --git a/src/Serilog.Settings.Configuration/Settings/Configuration/ConfigurationValueSyntax.cs b/src/Serilog.Settings.Configuration/Settings/Configuration/ConfigurationValueSyntax.cs new file mode 100644 index 0000000..0569531 --- /dev/null +++ b/src/Serilog.Settings.Configuration/Settings/Configuration/ConfigurationValueSyntax.cs @@ -0,0 +1,14 @@ +using System.Text.RegularExpressions; + +namespace Serilog.Settings.Configuration +{ + static class ConfigurationValueSyntax + { + const string LevelSwitchNameRegex = @"^\$[A-Za-z]+[A-Za-z0-9]*$"; + + public static bool IsValidSwitchName(string input) + { + return Regex.IsMatch(input, LevelSwitchNameRegex); + } + } +} \ No newline at end of file diff --git a/test/Serilog.Settings.Configuration.Tests/ConfigurationSettingsTests.cs b/test/Serilog.Settings.Configuration.Tests/ConfigurationSettingsTests.cs index 5a627a7..bdb5c6a 100644 --- a/test/Serilog.Settings.Configuration.Tests/ConfigurationSettingsTests.cs +++ b/test/Serilog.Settings.Configuration.Tests/ConfigurationSettingsTests.cs @@ -390,5 +390,73 @@ public void LoggingLevelSwitchCanBeUsedForMinimumLevelOverrides() Assert.False(evt is null, "LoggingLevelSwitch level was changed to Information for logger System.*. It should now log Information events for SourceContext System.Bar."); // ReSharper restore HeuristicUnreachableCode } + + + [Trait("Bugfix", "#91")] + [Fact] + public void WriteToLoggerWithRestrictedToMinimumLevelIsSupported() + { + var json = @"{ + ""Serilog"": { + ""Using"": [""TestDummies""], + ""WriteTo"": [{ + ""Name"": ""Logger"", + ""Args"": { + ""configureLogger"" : { + ""WriteTo"": [{ + ""Name"": ""DummyRollingFile"", + ""Args"": {""pathFormat"" : ""C:\\""} + }]}, + ""restrictedToMinimumLevel"": ""Warning"" + } + }] + } + }"; + + var log = ConfigFromJson(json) + .CreateLogger(); + + DummyRollingFileSink.Emitted.Clear(); + + log.Write(Some.InformationEvent()); + log.Write(Some.WarningEvent()); + + Assert.Equal(1, DummyRollingFileSink.Emitted.Count); + } + + [Trait("Bugfix", "#91")] + [Fact] + public void WriteToSubLoggerWithLevelSwitchIsSupported() + { + var json = @"{ + ""Serilog"": { + ""Using"": [""TestDummies""], + ""LevelSwitches"": {""$switch1"" : ""Warning"" }, + ""MinimumLevel"" : { + ""ControlledBy"" : ""$switch1"" + }, + ""WriteTo"": [{ + ""Name"": ""Logger"", + ""Args"": { + ""configureLogger"" : { + ""WriteTo"": [{ + ""Name"": ""DummyRollingFile"", + ""Args"": {""pathFormat"" : ""C:\\""} + }]} + } + }] + } + }"; + + var log = ConfigFromJson(json) + .CreateLogger(); + + DummyRollingFileSink.Emitted.Clear(); + + log.Write(Some.InformationEvent()); + log.Write(Some.WarningEvent()); + + Assert.Equal(1, DummyRollingFileSink.Emitted.Count); + } } } diff --git a/test/Serilog.Settings.Configuration.Tests/Serilog.Settings.Configuration.Tests.csproj b/test/Serilog.Settings.Configuration.Tests/Serilog.Settings.Configuration.Tests.csproj index a7ff7c7..e817514 100644 --- a/test/Serilog.Settings.Configuration.Tests/Serilog.Settings.Configuration.Tests.csproj +++ b/test/Serilog.Settings.Configuration.Tests/Serilog.Settings.Configuration.Tests.csproj @@ -1,7 +1,7 @@  - net452;netcoreapp1.0 + net452;netcoreapp2.0 Serilog.Settings.Configuration.Tests ../../assets/Serilog.snk true diff --git a/test/TestDummies/TestDummies.csproj b/test/TestDummies/TestDummies.csproj index d1e5399..b0d89c0 100644 --- a/test/TestDummies/TestDummies.csproj +++ b/test/TestDummies/TestDummies.csproj @@ -1,7 +1,7 @@  - net452;netstandard1.3 + net452;netstandard2.0 TestDummies ../../assets/Serilog.snk true