Skip to content

Instantly share code, notes, and snippets.

@sangheestyle
Created September 1, 2018 20:38
Show Gist options
  • Save sangheestyle/de01cacf52b92278635e23a682888610 to your computer and use it in GitHub Desktop.
Save sangheestyle/de01cacf52b92278635e23a682888610 to your computer and use it in GitHub Desktop.
Newbie's practice 1: Logging and Configuration

Newbie's practice: Logging and Configuration

Remarks

Environment

  • ASPNETCORE_ENVIRONMENT is used for environment varialble for ASP.net core. It is convention. Instead of that, I use similar one because it is console app.
  • ?? operator can be used for default env variable.

Configuration

  • A file can be a placeholder for Configuration.
  • appsettings.json is just conventional setting name on .net core.
  • Section can be selected by Configuration.GetSection("SectionName").

ServiceCollection and serviceProvider

  • .net core provides default dependency injection container. So, we can utilize it.
  • In this session, we can't say it is useful but just stick to it for next session.
  • Dependency injection in ASP.NET Core should be useful resource.

Logging

  • ServiceCollection helps us to add logging.
  • Lambda expressions for logging builder can be used.
  • Please check LogLevel on appsettings.Development.json.
  • You can create logger from loggerFactory.
  • In CreateLogger<Program>(), Program is category name. Usually class name is used.
  • Understanding log level is important.
  • Without ((IDisposable) serviceProvider)?.Dispose();, you can't see output at this moment. Please check here.

Reference

{
"Logging": {
"Console": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Trace",
"LoggerDemo.Program": "Information"
}
},
"LogLevel": {
"Default": "Debug"
}
}
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration" Version="2.2.0-preview1-35029" />
<PackageReference Include="Microsoft.Extensions.Configuration.JSON" Version="2.2.0-preview1-35029" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.1.1" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="2.2.0-preview1-35029" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="2.2.0-preview1-35029" />
</ItemGroup>
</Project>
using System;
using System.IO;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
namespace LoggerDemo
{
public class Program
{
public static void Main(string[] args)
{
string env = Environment.GetEnvironmentVariable("DOTNETCORE_ENVIRONMENT") ?? "Development";
var configurationBuilder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env}.json", optional: false, reloadOnChange: true);
var Configuration = configurationBuilder.Build();
var serviceCollection = new ServiceCollection()
.AddLogging(builder =>
{
builder.AddConfiguration(Configuration.GetSection("Logging"));
builder.AddConsole();
});
var serviceProvider = serviceCollection.BuildServiceProvider();
var loggerFactory = serviceProvider.GetService<ILoggerFactory>();
var logger = loggerFactory.CreateLogger<Program>();
logger.LogTrace("Trace");
logger.LogDebug("Debug");
logger.LogInformation("Information");
logger.LogWarning("Warning");
logger.LogError("Error");
((IDisposable) serviceProvider)?.Dispose();
}
}
}
@sangheestyle
Copy link
Author

sangheestyle commented Sep 1, 2018

@sangheestyle
Copy link
Author

Next topic (maybe):

logging on AWS CloudWatch:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment