ASP에서 수행하는 로깅을 해제하는 방법.NET 핵심 프레임워크
ASP에서 수행한 로깅을 해제하려면 어떻게 해야 합니까?각 요청에 대한 NET.
정보 09:38:41 사용자 프로필을 사용할 수 있습니다.C:' 사용하기 파일:\\Users\xxxx\AppData\field\ASP.NET\DataProtection-Keys'를 키 저장소로 사용하고 윈도우즈 DPAPI를 사용하여 대기 중인 키를 암호화합니다.
09 호스트 시작 DEBUG 09:38:41 호스트
09 호스팅 시작 DEBUG 09:38:41 스팅시작
정보 09:38:41 HTTP/1.1 시작 요청 http://localhost:23369/
정보 09:38:41 HTTP/1.1 DEBUG 시작 요청 http://localhost:23369/text/html DEBUG 09:38:41 DEBUG 요청은 지원되지 않습니다.
09경로 /가되는 파일 형식 DEBUG 09:38:41 파일 과 일치하지 .
DEBUG 09:38:41 요청이 경로와 이름이 'default'이고 템플릿이 '{controller='인 경로와 일치했습니다.Home}/{action=인덱스}/{id?DEBUG 09:38:41 요청이 경로와 이름이 'default'이고 템플릿이 '{controller='인 경로와 일치했습니다.Home}/{action=인덱스}/{id?DEBUG 09:38:41 수행 포럼 실행.컨트롤러입니다.홈 컨트롤러.색인
DEBUG 09:38:41 수행 포럼 실행.컨트롤러입니다.홈 컨트롤러.색인
정보 09:38:41 조치 방법 포럼 실행.컨트롤러입니다.인수가 - Valid', 모델 상태가 Valid() - ModelState is Valid'
정보 09:38:41 조치 방법 포럼 실행.컨트롤러입니다.홈 컨트롤러.색인
..
이 로그를 어떻게 끄는지 아직 찾지 못했습니다.
은 나의 이것나입니다.Configure의법에 있는 Startup 명령어:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddProvider(new Log4NetProvider());
if (env.IsDevelopment())
{
app.UseBrowserLink();
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
// For more details on creating database during deployment see http://go.microsoft.com/fwlink/?LinkID=615859
try
{
using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>()
.CreateScope())
{
serviceScope.ServiceProvider.GetService<ApplicationDbContext>()
.Database.Migrate();
}
}
catch { }
}
app.UseIISPlatformHandler(options => options.AuthenticationDescriptions.Clear());
app.UseStaticFiles();
app.UseIdentity();
// To configure external authentication please see http://go.microsoft.com/fwlink/?LinkID=532715
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
그리고 이건 제 프로젝트입니다.json 파일:
"dependencies": {
"EntityFramework.Commands": "7.0.0-rc1-final",
"EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final",
"log4net": "2.0.5",
"Microsoft.AspNet.Authentication.Cookies": "1.0.0-rc1-final",
"Microsoft.AspNet.Diagnostics.Entity": "7.0.0-rc1-final",
"Microsoft.AspNet.Identity.EntityFramework": "3.0.0-rc1-final",
"Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
"Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
"Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final",
"Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
"Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",
"Microsoft.AspNet.Tooling.Razor": "1.0.0-rc1-final",
"Microsoft.Extensions.CodeGenerators.Mvc": "1.0.0-rc1-final",
"Microsoft.Extensions.Configuration.FileProviderExtensions": "1.0.0-rc1-final",
"Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final",
"Microsoft.Extensions.Configuration.UserSecrets": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging": "1.0.0-rc1-final",
"Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc1-final"
},
"commands": {
"web": "Microsoft.AspNet.Server.Kestrel",
"ef": "EntityFramework.Commands"
},
"frameworks": {
"dnx451": { }
},
내 log4net 제공자를 여기서 가져왔습니다.
제가 누락된 부분이 있는지는 잘 모르겠지만 Microsoft 로그의 로그 수준을 높이고 싶지 않으십니까?
집appsettings.json)로 표시됩니다..AddJsonFile("appsettings.json", ...))
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Trace",
"System": "Information",
"Microsoft": "Information"
로.
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Trace",
"System": "Information",
"Microsoft": "None"
환경변수를).AddEnvironmentVariables())
Logging:LogLevel:Microsoft=None
또한 보다 구체적으로 설명할 수 있습니다. 다음은 대부분의 항목을 줄이지만 다음과 같습니다.Microsoft.AspNetCore.Hosting.Internal.WebHostInformation.
"Microsoft": "Information",
"Microsoft.AspNetCore.Mvc.Internal": "Warning",
"Microsoft.AspNetCore.Authentication": "Warning"
이법방적않경는적용우지용에 대해 하지 않을 경우 합니다.log4net
제게 정말로 효과가 있었던 것은 ASP에 이것을 추가한 것입니다. 2의 NET Core 2.0 관련 자료Startup.cs파일 이름:
using Microsoft.Extensions.Logging;
public void ConfigureServices(IServiceCollection services)
{
.
.
.
services.AddLogging(
builder =>
{
builder.AddFilter("Microsoft", LogLevel.Warning)
.AddFilter("System", LogLevel.Warning)
.AddFilter("NToastNotify", LogLevel.Warning)
.AddConsole();
});
}
이렇게 가 렇게 하이 전된 로정대시경다표니수됩시로깅준고그로 전달되는 builder.AddFilter.
내 에는 이제 의 파일 log4net.log가.INFO마이크로소프트와 다른 회사들이 스핏한 벌목.
자세한 내용은 여기 @ Microsoft Docs: 로그 필터링
Serilog를 사용하여 작업을 수행하는 경우.NET Core 로깅을 사용하면 appsettings.json 파일을 업데이트하여 다음과 같이 로그 수준을 설정할 수 있습니다.
"Serilog": {
"MinimumLevel": {
"Default": "Verbose",
"Override": {
"Microsoft": "Error",
"System": "Error"
}
},
"Properties": {
"Application": "your-app"
}
}
이렇게 하면 시스템/Microsoft의 오류만 기록하고 다른 모든 오류는 원하는 대로 기록할 수 있습니다.
ASP.NET Core 버전 3에서는 서비스 구성 기능에서 기존 로그 공급자를 지울 수 있습니다.
public void ConfigureServices(IServiceCollection services) {
//Do everything else...
services.AddLogging(c => c.ClearProviders());
}
로깅을 설정합니다.의 수준appsettings.json중요한 것은Microsoft충분하지 않았습니다.다음과 같은 키를 구체적으로 설정해야 했습니다.
"Microsoft.Hosting.Lifetime": "Warning",
"Microsoft.AspNetCore.Hosting.Diagnostics": "Warning",
"Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware": "Warning"
하는 대신 를 들어 " " " " " " (" " " " " " " " " "Microsoft.* 했다일. 는 다음과 같이을 내렸습니다.그래서 저는 다음과 같이 결론을 내렸습니다.
{
"Logging": {
"LogLevel": {
"Default": "Warning",
"Microsoft.*": "Warning"
}
...
}
.net 자체 및 에 의해 asp.net 에 됩니다.ILoggerProvider해당 소스를 기록할지 여부를 결정하기 위한 구현.
다음은 에 대한 수정된 구현입니다.log4net기본 소스 필터링을 추가합니다.
public class Log4NetProvider : ILoggerProvider
{
private static readonly NoopLogger _noopLogger = new NoopLogger();
private readonly Func<string, bool> _sourceFilterFunc;
private readonly ConcurrentDictionary<string, Log4NetLogger> _loggers = new ConcurrentDictionary<string, Log4NetLogger>();
public Log4NetProvider(Func<string, bool> sourceFilterFunc = null)
{
_sourceFilterFunc = sourceFilterFunc != null ? sourceFilterFunc : x => true;
}
public ILogger CreateLogger(string name)
{
if (!_sourceFilterFunc(name))
return _noopLogger;
return _loggers.GetOrAdd(name, x => new Log4NetLogger(name));
}
public void Dispose()
{
_loggers.Clear();
}
private class NoopLogger : ILogger
{
public IDisposable BeginScopeImpl(object state)
{
return null;
}
public bool IsEnabled(LogLevel logLevel)
{
return false;
}
public void Log(LogLevel logLevel, int eventId, object state, Exception exception, Func<object, Exception, string> formatter)
{
}
}
}
리고그.Log4NetAspExtensions:
public static void ConfigureLog4Net(this IApplicationEnvironment appEnv, string configFileRelativePath)
{
GlobalContext.Properties["appRoot"] = appEnv.ApplicationBasePath;
XmlConfigurator.Configure(new FileInfo(Path.Combine(appEnv.ApplicationBasePath, configFileRelativePath)));
}
public static void AddLog4Net(this ILoggerFactory loggerFactory, Func<string, bool> sourceFilterFunc = null)
{
loggerFactory.AddProvider(new Log4NetProvider(sourceFilterFunc));
}
public static void AddLog4Net(this ILoggerFactory loggerFactory)
{
loggerFactory.AddLog4Net(null);
}
사가능량용in(in))Startup.cs):
public Startup(IHostingEnvironment env, IApplicationEnvironment appEnv, ILoggerFactory loggerFactory)
{
appEnv.ConfigureLog4Net("log4net.xml");
loggerFactory.AddLog4Net(x => !x.StartsWith("Microsoft."));
}
ASP 내부 및 이전.NET 5 RC1(현재 ASP).NET Core 1.0), 즉, 로거 팩토리를 통해 수행할 수 있습니다.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
// completely disable logging or use one of the other levels, such as Error, Critical, Warning etc.
loggerFactory.MinimumLevel = LogLevel.None;
}
그러나 현재 분기(아직 릴리스되지 않았지만 야간 빌드를 통해 사용 가능)에서는 이 분기가 제거되었습니다.은 이제당은합니다야해과통을 해야 합니다.LogLevel방법을 됩니다.일반적으로 이 작업은 확장 방법을 통해 수행됩니다.
된 콘솔 로거의 는 된장콘로거경우의솔내,loggerFactory.AddConsole(minimumLevel: LogLevel.Warning);예를들면.
로거 공급자는 사용자 지정 공급자이므로 사용자가 직접 구성해야 합니다.콘솔 로거가 어떻게 작동하는지 살펴봅니다.공급자에게 대리인을 전달하여 필터링을 수행합니다.
GitHub 원본:
public static ILoggerFactory AddConsole(
this ILoggerFactory factory,
LogLevel minLevel,
bool includeScopes)
{
factory.AddConsole((category, logLevel) => logLevel >= minLevel, includeScopes);
return factory;
}
물론 대리자를 전달하는 대신 log4net의 로그 수준을 직접 설정할 수도 있습니다.
업데이트: 댓글에서 지적한 내용을 확대하기 위해
그ILoggerProvider실제 로깅 프레임워크 주변의 래퍼일 뿐입니다. 경는에우의 간단한 .ConsoleLoggerProvider그 뒤에 있는 모든 프레임워크는 없고, 그저 단순합니다.Console.WriteLine 러불러.
log4net의 경우, 로그를 수준별로 활성화할 수 있다는 것은 예제를 통해 알 수 있습니다.에서는 이 작업을 수행할 수 없습니다.NET Core 로거 추상화는 필터링을 수행하지 않으므로 위와 같습니다.
log4net에서ILoggerProvider모든 로그 수준을 log4net 라이브러리로 라우팅하고 필터링하기만 하면 됩니다.
생성된 연결된 GitHub 이슈 @haim770을 기반으로 필터링할 소스 컨텍스트가 있으며, log4net에 소스 컨텍스트 개념이 없으면 공급자에서 이를 구현해야 합니다.SourceContext 개념이 있는 경우 공급자는 이를 log4net이 예상하는 구조로 재라우팅/변환해야 합니다.
보시다시피 로거 자체는 항상 ASP의 내부 세부 사항과 구현 세부 사항에 대해 알지 못합니다.. 그.Log4NetProvider해당 api를 중심으로 번역/수정하는 작업이기 때문에 할 수 없고 해서는 안 됩니다.공급자는 추상화에 불과하므로 구현 세부 정보를 라이브러리에 유출할 필요가 없습니다.
Serilog를 사용하면 로거 구성을 정의할 때 Microsoft 구성 요소에 대한 재정의를 지정하는 간단한 경우가 있음을 알게 되었습니다.
Log.Logger = new LoggerConfiguration()
... // Other config
.MinimumLevel.Information()
.MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
... // Other config
.CreateLogger();
이를 통해 로그만 기록할 수 있습니다.Warning요소의 경우 는 이 항목을 사용합니다.Information내 부품에 대한 이상.
startup.cs 에서 이 두 가지 구성 플래그를 설정합니다.
services.ConfigureTelemetryModule<DependencyTrackingTelemetryModule>((module, options) =>
{
options.EnableDependencyTrackingTelemetryModule = false;
options.EnableRequestTrackingTelemetryModule = false;
});
그러면 로그에서 추적 원격 측정 유형만 볼 수 있습니다.
언급URL : https://stackoverflow.com/questions/35251078/how-to-turn-off-the-logging-done-by-the-asp-net-core-framework
'programing' 카테고리의 다른 글
| Objective-C가 설치된 iOS 9에서 상태 표시줄 텍스트 색을 밝은 색으로 변경 (0) | 2023.05.03 |
|---|---|
| Eclipse에서 클래스의 모든 메서드에 메서드 중단점 추가IDE (0) | 2023.05.03 |
| 이클립스 자동 저장 (0) | 2023.04.28 |
| WPF/C#에서 마진 프로그래밍 방식 변경 (0) | 2023.04.28 |
| TabControl 헤더 숨기기 (0) | 2023.04.28 |