2018年1月16日火曜日

gRPC のログ出力

gRPC のログ出力は非常に簡単です。GrpcEnvironment にロガーを設定しておくだけです。

Grpc.Core.GrpcEnvironment.SetLogger(
    new Grpc.Core.Logging.ConsoleLogger()
);

ログを出力するには、Grpc.Core.GrpcEnvironment.Logger に対してログ出力メソッドを呼び出します。
Grpc.Core.GrpcEnvironment.Logger.Info("サービスを開始しました。");

出力結果
I0113 15:12:33.540038 サービスを開始しました。

Google.ProtoBuf で提供されているロガー

 

ロガー 説明
ConsoleLogger コンソールにログを出力します。
TextWriterLogger テキストファイルにログを出力します。
LogLevelFilterLogger ログレベルによるフィルタを行うためのロガー。ログレベルと出力先のロガーを指定します。
NullLogger 何も処理を行わないダミーのロガー。何もログを出力する必要がないときに使用します。


Grpc.Core.Logging.ILogger インターフェースの実装はそれほど難しいものではありませんので、上記の既定のロガー以外にも独自のロガーを用意しておくとよいと思います。
  • イベントログにログを出力するロガー
  • Event Tracing for Windows にログを出力するロガー
  • データベースにログを出力するロガー
  • 指定された複数のロガーに対してログを出力するロガー 
  • 特定の型専用のロガー

 

特定の型専用のロガー


特定の型専用のロガーは次のように実装します。
  1. ILogger.ForType<T> メソッドで T に対するロガーを返すように実装したロガーを実装します。
  2. 1 のロガーを Grpc.Core.GrpcEnvironment.SetLogger メソッドで設定します。
  3. ログ出力を実装するコードから Grpc.Core.GrpcEnvironment.Logger.ForType<T> メソッドを呼び出して T に対するロガーを取得します。
  4. 3 のロガーに対してログを出力します。

実際、gRPC では多くのクラスで次のように実装されています。 GrpcEnvironment に設定されたロガーに対して ForType メソッドを呼び出し、その型に対するロガーを取得します。 そのロガーを静的フィールドに格納し、ログ出力に用いています。
public class HogeClass
{
    static readonly ILogger Logger
        = GrpcEnvironment.Logger.ForType(typeof(HogeClass));

    private void HogeMethod()
    {
        Logger.Info("HogeMethod Start.");
    }
}

0 件のコメント:

コメントを投稿

paiza のスキルチェックをやってみました

いまさら感はありますが、 paiza のスキルチェックをやってみました。指定された時間内にコードを書いてユニットテストにかけ、その結果を基に評価を数値化してくれるというものですが、ゲーム感覚で空き時間を見つけて進めていこうと考えています。 どうやら時間が短いほど高い評価を得...