I am working on .net framework 4.7.2 web API which doesn't have appsetting.json.
I wonder where should I configure the below setting for Microsoft.Extension.Logging?
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
and Bind it to LoggerFilterOption on Startup?
Below seems not to work:
LoggerFilterOptions options = new LoggerFilterOptions();
var config = UnityConfig.Container.Resolve<IConfiguration>();
config.GetSection("Logging").Bind(options);
I want to control MinLogLevel and Rules (LoggerFilterOption)through the web.config, Can that be achieved?
Related
I am now handling the logs in my ASP.NET Core project (based on .NET 6), and I need to reduce some logs from Microsoft.AspNetCore library.
I configured log setting in appsettings.json as below:
"Logging": {
"LogLevel": {
"Microsoft.AspNetCore.Hosting.Diagnostics": "Information", // Required
"Microsoft.AspNetCore": "Warning", // Avoid any logs from other classes under this namesapce
"Microsoft": "Information"
}
}
Could someone help me to check whether this setting can achieve my requirement?
Does the log level of Microsoft.AspNetCore will override the setting of Microsoft.AspNetCore.Hosting.Diagnostics?
Thank you.
Does the log level of Microsoft.AspNetCore will override the setting of Microsoft.AspNetCore.Hosting.Diagnostics?
No, as per docs the most specific category is applied.
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
}
}
In the preceding JSON:
The "Default", "Microsoft", and "Microsoft.Hosting.Lifetime" log level categories are specified.
The "Default" value is applied to all categories that aren't otherwise specified, effectively making all default values for all categories "Information". You can override this behavior by specifying a value for a category.
The "Microsoft" category applies to all categories that start with "Microsoft".
The "Microsoft" category logs at a log level of Warning and higher.
The "Microsoft.Hosting.Lifetime" category is more specific than the "Microsoft" category, so the "Microsoft.Hosting.Lifetime" category logs at log level "Information" and higher.
A specific log provider is not specified, so LogLevel applies to all the enabled logging providers except for the Windows EventLog.
I have Asp.net Project And I Use Docker Compose
I want To Connect Sql With Windows Authentication
But I Can't
Can You Help Me ?
appsetting :
{
"ConnectionStrings":{
"DefaultConnection": "Server=*******;Database=******;Trusted_Connection=True;MultipleActiveResultSets=true"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
Docker-Compose :
version: '3.4'
services:
connectsqltodocker:
image: ${DOCKER_REGISTRY-}connectsqltodocker
build:
context: .
dockerfile: ConnectSqlToDocker/Dockerfile
depends_on:
- OKKouroshCard
OKKouroshCard:
image: "mcr.microsoft.com/mssql/server"
I am trying to upgrade the .netcore framework from 2.2 to 3.1 .
But I want to use IHostingEnvironment, IWebHostBuilder and AddNewtonsoftJson in 3.1 also.
(I know they should be replaced but if I will do so, code refactoring will be required, which i don't need right now).
When I am executing an api using swagger then getting 500 error with message:
can't parse JSON. Raw result:
System.Exception: Method not found: 'Microsoft.Extensions.Logging.ILoggerFactory Microsoft.Extensions.Logging.ConsoleLoggerExtensions.AddConsole(Microsoft.Extensions.Logging.ILoggerFactory, Microsoft.Extensions.Logging.LogLevel)'.
And this is the beginning of stack trace
fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1]
An unhandled exception has occurred while executing the request.
System.MissingMethodException: Method not found: 'Microsoft.Extensions.Logging.ILoggerFactory Microsoft.Extensions.Logging.ConsoleLoggerExtensions.AddConsole(Microsoft.Extensions.Logging.ILoggerFactory, Microsoft.Extensions.Logging.LogLevel)'.
I am configuring Logger only in Program.cs .
public static IWebHostBuilder CreateWebHostBuilder (string[] args) =>
WebHost.CreateDefaultBuilder (args)
.UseUrls ("http://0.0.0.0:5000")
.ConfigureLogging ((hostingContext, logging) => {
logging.AddConfiguration (hostingContext.Configuration.GetSection ("Logging"));
logging.AddConsole ();
logging.AddApplicationInsights ();
})
.UseStartup<Startup> ();
}
Configurations in appsettings.json
"Logging": {
"IncludeScopes": false,
"ApplicationInsights": {
"LogLevel": {
"Default": "Warning",
"Microsoft": "Error"
}
},
"LogLevel": {
"Default": "Information",
"System": "Warning",
"Microsoft": "Warning"
},
"Console": {
"IncludeScopes": true
}
}
I am not understanding why it's not working.
Note: I have 6 APIs in this project and 1 is working successfully with the above changes and 5 are failing with the above error.
As I read in discussion John has given correct suggestion. In visual Studio go to NuGet - Solution and update all the package which has require to update.
I have an ASP.NET Core 3.1 API running on Microsoft Azure App Service.
I have set up an ILogger into the app and I use it extensively to monitor the behavior of the API. I would like to be able to see those messages real time into the Azure Log Stream of the app portal.
I managed to get logs after registering the AzureWebAppDiagnostics into Program.cs as follows:
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.AddConsole();
logging.AddAzureWebAppDiagnostics();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
}
The problem is that messages I logged explicitly, using
logger.LogInformation("whatever message")
are mixed with system messages and becomes flooded: Entity Framework commands, Microsoft.Hosting.Lifetime messages, and multiple other informative messages.
How can I set up the system in a way that I get only error/warning messages from the system, and informative messages from my app code.
I tried to change the appsettings.json as follows, but it seems to have no effect at all :
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Error",
"Microsoft.Hosting.Lifetime": "Error",
"Microsoft.*": "Error",
"System": "Error",
"Microsoft.EntityFrameworkCore.*": "Warning"
}
}
I deleted as well the appsettings.development.json file just in case, as suggested here.
What am I doing wrong?
Actually, after throrough researches, the solution was provided here
You need to add AzureAppServicesBlob and AzureAppServicesFile configuration into your configuration file, they seem to be the one taken into account by the Azure Log Stream.
So I added the following part :
"AzureAppServicesBlob": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Error",
"System": "Error"
}
},
"AzureAppServicesFile": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Error",
"System": "Error"
}
}
It's not wildcarded in the configuration. It's simply a namespace prefix: use Microsoft.EntityFrameworkCore as the property name.
In my .NET Core app, I define a logger factory with Serilog and then pass it to various components in the system.
When I set my logging level to Debug, some components (Memcached client, for instance) completely and utterly overwhelm the logs due to how much they log.
Is there a way to specify that I want Debug for all, except certain ones? I see that there is an Override entry, but I am not clear as to how to specify a specific component.
"Serilog": {
"MinimumLevel": {
"Default": "Debug",
"Override": {
"Microsoft": "Warning",
"System": "Information"
}
}
}