2017-11-30 2 views
3

私は私のappsettings.jsonappsettings.Development.jsonを設定するしかし、私は手動でWebHostBuilderにConfigureLogging を追加しない限り、私は情報メッセージの下に記録され、何も得ることができませんセットアップ、次のように:(まだ)

var host = new WebHostBuilder() 
       .UseConfiguration(config) 
       .UseKestrel() 
       .UseContentRoot(Directory.GetCurrentDirectory()) 
       .UseStartup<Startup>() 
       .ConfigureLogging(logging => logging.SetMinimumLevel(LogLevel.Debug)) 
       .Build(); 

をだから今、私は動的環境に基づいてログレベルを設定したいのですが、私のプログラムのメイン(にIHostingEnvironmentインスタンスへのアクセスを取得する方法を見つけ出すことはできません)前WebHostBuilderの設定私のスタートアップクラスを参照してください。

私は、次のようなコードで、ここでのポストを見たが、それは静的な型が型の引数として使用することはできませんと言って、私のGetService<Application>()ラインの構文エラーを与えている:

var loggingLevel = LogLevel.Information; 

IServiceCollection serviceCollection = new ServiceCollection(); 
IServiceProvider serviceProvider = serviceCollection.BuildServiceProvider(); 
var app = serviceProvider.GetService<Application>(); 
var hostingEnvironment = app.ApplicationServices.GetRequiredService<IHostingEnvironment>(); 
if (hostingEnvironment.IsDevelopment()) 
{ 
    loggingLevel = LogLevel.Debug; 
} 

がありますこれを行う良い方法は?

{ 
    "Logging": { 
    "IncludeScopes": false, 
    "LogLevel": { 
     "Default": "Information" 
    } 
    }, 
    "Log4Net": { 
    "ConfigFileRelativePath": "log4net.xml", 
    "Repository": "NETCoreRepository" 
    } 
} 

appsettings.Development.json:ここ

は私のappsettings.jsonある

{ 
    "Logging": { 
    "IncludeScopes": false, 
    "LogLevel": { 
     "Default": "Debug" 
    } 
    }, 
    "Swagger": { 
    "FileName": "MyController.xml" 
    } 
} 

そして、私のプロジェクトのデバッグパネルには、環境変数を設定していない:

ASPNETCORE_ENVIRONMENT Development 
+0

ここにあなたのappSettingsを投稿できますか?これは通常、最小ロギングレベルを定義します。 – MindingData

+0

よろしくお願いします。私は多くの組み合わせを試しました。 WebHostBuilderのConfigureLoggingへの呼び出しを追加するまでは、両方とも、さまざまなプロバイダ(Consoleなど)で「Debug」を使用していました。 – Alan

答えて

1

今のところ、私は環境変数に行きました:

var loggingLevel = LogLevel.Information; 
var env = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); 
if (env != null && env.ToLower().Equals("development")) 
    loggingLevel = LogLevel.Debug; 
+0

アプリケーションが特定の環境で動作しているかどうかを確認する場合は、env.IsEnvironment( "environmentname")を使用することをお勧めします。実際にはケーシングを正しく無視します。 – joey

+0

私の質問のポイントは、WebHostBuilderをインスタンス化する前に "env"(私の例では "hostingEnvironment")にアクセスすることができないということです。 – Alan