Skip to content

Commit

Permalink
Added miru cli args for logging
Browse files Browse the repository at this point in the history
  • Loading branch information
joaofx committed Dec 1, 2023
1 parent f0aac6f commit bcf57ce
Show file tree
Hide file tree
Showing 15 changed files with 255 additions and 215 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Expand Up @@ -22,7 +22,7 @@ jobs:
- name: Setup .NET
uses: actions/setup-dotnet@v1
with:
dotnet-version: "7.0.203"
dotnet-version: "7.0.404"

- name: Build & Test
run: ./build test-ci
Expand All @@ -40,7 +40,7 @@ jobs:
# - name: Setup .NET
# uses: actions/setup-dotnet@v1
# with:
# dotnet-version: "7.0.203"
# dotnet-version: "7.0.404"
#
# - name: Setup Firefox
# uses: browser-actions/setup-firefox@latest
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Expand Up @@ -18,7 +18,7 @@ jobs:
- name: Setup .NET
uses: actions/setup-dotnet@v1
with:
dotnet-version: "7.0.203"
dotnet-version: "7.0.404"

- name: Build & Publish
env:
Expand Down
2 changes: 1 addition & 1 deletion global.json
@@ -1,5 +1,5 @@
{
"sdk": {
"version": "7.0.203"
"version": "7.0.404"
}
}
18 changes: 14 additions & 4 deletions src/Miru/Foundation/Bootstrap/ArgsConfiguration.cs
Expand Up @@ -6,13 +6,11 @@ namespace Miru.Foundation.Bootstrap;
public class ArgsConfiguration
{
public string Environment { get; private set; }

public bool Verbose { get; private set; }

public bool MiruLogInformation { get; private set; }
public bool SqlLogInformation { get; private set; }
public bool IsRunningCli { get; }

public bool IsRunningWebApp => IsRunningCli == false;

public string[] CliArgs { get; } = { };

public ArgsConfiguration(string[] args)
Expand Down Expand Up @@ -48,6 +46,18 @@ private string[] GetCliArgs(string[] args)
continue;
}

if (args[i].CaseCmp("--log"))
{
MiruLogInformation = true;
continue;
}

if (args[i].CaseCmp("--sql"))
{
SqlLogInformation = true;
continue;
}

// remove last argument in case parameter is a project assembly
// jetbrains rider add automatically when debugging
// to debug miru cli, project assembly in the end will throw a parser error on oakton
Expand Down
62 changes: 30 additions & 32 deletions src/Miru/Foundation/Bootstrap/LoggerConfigurations.cs
@@ -1,51 +1,49 @@
using System;
using Microsoft.Extensions.Logging;
using Serilog;
using Serilog.Events;
using ILogger = Serilog.ILogger;

namespace Miru.Foundation.Bootstrap
namespace Miru.Foundation.Bootstrap;

public class LoggerConfigurations
{
public class LoggerConfigurations
{
public static readonly string TimestampOutputTemplate = "{Timestamp:HH:mm:ss.fff} {Message}{NewLine}{Exception}";
public static readonly string TimestampOutputTemplate = "{Timestamp:HH:mm:ss.fff} {Message}{NewLine}{Exception}";

public static readonly string SimpleOutputTemplate = "{Message}{NewLine}{Exception}";
public static readonly string SimpleOutputTemplate = "{Message}{NewLine}{Exception}";

public static readonly string DetailedOutputTemplate = "{Message} - {Level} {SourceContext} {NewLine} {Exception}";
public static readonly string DetailedOutputTemplate = "{Message} - {Level} {SourceContext} {NewLine} {Exception}";

public static readonly ILogger Default = ForCli();
public static readonly ILogger Default = ForCli();

public static readonly LoggerConfiguration DefaultConfiguration = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Console(outputTemplate: SimpleOutputTemplate);
public static readonly LoggerConfiguration DefaultConfiguration = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Console(outputTemplate: SimpleOutputTemplate);

public static ILogger GetLogger(ArgsConfiguration argsConfig) => argsConfig.IsRunningCli ? ForCli() : ForWeb();
public static ILogger GetLogger(ArgsConfiguration argsConfig) =>
argsConfig.IsRunningCli ? ForCli() : ForWeb();

public static ILogger ForCli() => new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Console(outputTemplate: SimpleOutputTemplate)
.CreateLogger();
public static ILogger ForCli() => new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Console(outputTemplate: SimpleOutputTemplate)
.CreateLogger();

public static ILogger ForWeb() => new LoggerConfiguration()
.MinimumLevel.Debug()
// .WriteTo.Console(outputTemplate: TimestampOutputTemplate)
.CreateLogger();
public static ILogger ForWeb() => new LoggerConfiguration()
.MinimumLevel.Debug()
// .WriteTo.Console(outputTemplate: TimestampOutputTemplate)
.CreateLogger();

public static ILoggerFactory CreateLoggerFactory(Action<LoggerConfiguration> config = null)
public static ILoggerFactory CreateLoggerFactory(Action<LoggerConfiguration> config = null)
{
return LoggerFactory.Create(builder =>
{
return LoggerFactory.Create(builder =>
{
var loggerConfiguration = new LoggerConfiguration()
.MinimumLevel.Warning();
var loggerConfiguration = new LoggerConfiguration()
.MinimumLevel.Warning();
config?.Invoke(loggerConfiguration);
config?.Invoke(loggerConfiguration);
loggerConfiguration
.WriteTo.Console(outputTemplate: SimpleOutputTemplate);
loggerConfiguration
.WriteTo.Console(outputTemplate: SimpleOutputTemplate);
builder.AddSerilog(loggerConfiguration.CreateLogger());
});
}
builder.AddSerilog(loggerConfiguration.CreateLogger());
});
}
}
53 changes: 25 additions & 28 deletions src/Miru/Foundation/Logging/HostBuilderExtensions.cs
@@ -1,50 +1,47 @@
using System;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Serilog;
using Serilog.Extensions.Logging;

namespace Miru.Foundation.Logging
namespace Miru.Foundation.Logging;

public static class HostBuilderExtensions
{
public static class HostBuilderExtensions
public static IHostBuilder ConfigureSerilog(this IHostBuilder builder, Action<LoggerConfiguration> config)
{
public static IHostBuilder ConfigureSerilog(this IHostBuilder builder, Action<LoggerConfiguration> config)
builder.ConfigureServices(services =>
{
builder.ConfigureServices(services =>
{
services.AddSingleton<ILoggerConfigurationBuilder>(new LoggerConfigurationBuilder(config));
services.AddSingleton<ILoggerConfigurationBuilder>(new LoggerConfigurationBuilder(config));
services.TryAddSingleton(sp =>
{
var loggerConfiguration = new LoggerConfiguration();
services.TryAddSingleton(sp =>
{
var loggerConfiguration = new LoggerConfiguration();
var configBuilders = sp.GetServices<ILoggerConfigurationBuilder>();
var configBuilders = sp.GetServices<ILoggerConfigurationBuilder>();
foreach (var configBuilder in configBuilders)
{
configBuilder.Config(loggerConfiguration);
}
foreach (var configBuilder in configBuilders)
{
configBuilder.Config(loggerConfiguration);
}
var logger = loggerConfiguration.CreateLogger();
var logger = loggerConfiguration.CreateLogger();
return new RegisteredLogger(logger);
});
return new RegisteredLogger(logger);
});
services.ReplaceSingleton<ILoggerFactory>(sp =>
{
var logger = sp.GetRequiredService<RegisteredLogger>().Logger;
services.ReplaceSingleton<ILoggerFactory>(sp =>
{
var logger = sp.GetRequiredService<RegisteredLogger>().Logger;
Log.Logger = logger;
Log.Logger = logger;
var factory = new SerilogLoggerFactory(logger, true);
var factory = new SerilogLoggerFactory(logger, true);
return factory;
});
return factory;
});
});

return builder;
}
return builder;
}
}
83 changes: 41 additions & 42 deletions src/Miru/Foundation/Logging/LoggingServiceCollectionExtension.cs
Expand Up @@ -7,64 +7,63 @@
using Serilog.Events;
using Serilog.Extensions.Logging;

namespace Miru.Foundation.Logging
namespace Miru.Foundation.Logging;

public static class LoggingServiceCollectionExtension
{
public static class LoggingServiceCollectionExtension
public static IServiceCollection AddAppLogger<TStartup>(this IServiceCollection services)
{
public static IServiceCollection AddAppLogger<TStartup>(this IServiceCollection services)
{
return services.AddSingleton(new AppLoggerFactory(Log.ForContext<TStartup>));
}
return services.AddSingleton(new AppLoggerFactory(Log.ForContext<TStartup>));
}

public static IServiceCollection AddSerilogConfig(
this IServiceCollection services,
Action<LoggerConfiguration> config = null)
{
if (config == null)
services.AddSingleton<ILoggerConfigurationBuilder>(new LoggerConfigurationBuilder(_ => { }));
else
services.AddSingleton<ILoggerConfigurationBuilder>(new LoggerConfigurationBuilder(config));
public static IServiceCollection AddSerilogConfig(
this IServiceCollection services,
Action<LoggerConfiguration> config = null)
{
if (config == null)
services.AddSingleton<ILoggerConfigurationBuilder>(new LoggerConfigurationBuilder(_ => { }));
else
services.AddSingleton<ILoggerConfigurationBuilder>(new LoggerConfigurationBuilder(config));

services.TryAddSingleton(sp =>
{
var loggerConfiguration = new LoggerConfiguration();
services.TryAddSingleton(sp =>
{
var loggerConfiguration = new LoggerConfiguration();
var configBuilders = sp.GetServices<ILoggerConfigurationBuilder>();
var configBuilders = sp.GetServices<ILoggerConfigurationBuilder>();
var defaultConfig = new LoggerConfigurationBuilder(_ =>
{
_.MinimumLevel.Warning();
});
var defaultConfig = new LoggerConfigurationBuilder(_ =>
{
_.MinimumLevel.Warning();
});
defaultConfig.Config(loggerConfiguration);
defaultConfig.Config(loggerConfiguration);
foreach (var configBuilder in configBuilders)
{
configBuilder.Config(loggerConfiguration);
}
foreach (var configBuilder in configBuilders)
{
configBuilder.Config(loggerConfiguration);
}
var configuration = sp.GetService<IConfiguration>();
var configuration = sp.GetService<IConfiguration>();
if (configuration != null)
loggerConfiguration.ReadFrom.Configuration(configuration);
if (configuration != null)
loggerConfiguration.ReadFrom.Configuration(configuration);
var logger = loggerConfiguration.CreateLogger();
var logger = loggerConfiguration.CreateLogger();
return new RegisteredLogger(logger);
});
return new RegisteredLogger(logger);
});

services.ReplaceSingleton<ILoggerFactory>(sp =>
{
var logger = sp.GetRequiredService<RegisteredLogger>().Logger;
services.ReplaceSingleton<ILoggerFactory>(sp =>
{
var logger = sp.GetRequiredService<RegisteredLogger>().Logger;
Log.Logger = logger;
Log.Logger = logger;
var factory = new SerilogLoggerFactory(logger, true);
var factory = new SerilogLoggerFactory(logger, true);
return factory;
});
return factory;
});

return services;
}
return services;
}
}
11 changes: 11 additions & 0 deletions src/Miru/Hosting/MiruHost.cs
Expand Up @@ -88,6 +88,17 @@ public static class MiruHost
else
services.AddSingleton<IMiruHost, CliMiruHost>();
// Logging
if (argsConfig.MiruLogInformation)
services.AddSerilogConfig(x =>
x.MinimumLevel.Override("Miru", LogEventLevel.Information));
if (argsConfig.SqlLogInformation)
services.AddSerilogConfig(x =>
x.MinimumLevel.Override(
"Microsoft.EntityFrameworkCore.Database.Command",
LogEventLevel.Information));
// AppConfig
services.Configure<DatabaseOptions>(host.Configuration.GetSection("Database"));
services.Configure<MailingOptions>(host.Configuration.GetSection("Mailing"));
Expand Down
13 changes: 4 additions & 9 deletions src/Miru/Mailing/SmtpOptions.cs
@@ -1,11 +1,6 @@
namespace Miru.Mailing
namespace Miru.Mailing;

public class SmtpOptions : ServerOptions
{
public class SmtpOptions
{
public string Host { get; set; }
public int Port { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public bool Ssl { get; set; }
}
public bool Ssl { get; set; }
}
2 changes: 1 addition & 1 deletion src/Miru/MailingRegistry.cs
Expand Up @@ -38,7 +38,7 @@ public static IServiceCollection AddSmtpSender(this IServiceCollection services)
return new SmtpSender(new SmtpClient(smtpOptions.Host, smtpOptions.Port)
{
EnableSsl = smtpOptions.Ssl,
Credentials = new NetworkCredential(smtpOptions.UserName, smtpOptions.Password)
Credentials = new NetworkCredential(smtpOptions.User, smtpOptions.Password)
});
});

Expand Down

0 comments on commit bcf57ce

Please sign in to comment.