0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[ODC]External Logicからのログ・トレース出力

Posted at

2025/11/04発表された新機能。早速利用方法を確認してみる。

一般的な作成手順は以下の記事を参照。以下の方法でプロジェクトを作成し、基礎的な実装は済んでいる前提で、ログ・トレース出力処理を追加してみる。

環境情報

OutSystemsExternalLibraries.SDK 1.5.0
.NET 8.0
Visual Studio Code Version 1.105.1
Personal Edition

ログ出力

実装

ILogger追加

ログ出力には、Microsoft.Extensions.Logging.ILoggerを使う。そのため、Loggingへの参照をNuGetで追加。
VSCodeのTerminalを開き、2025/11/6時点で最新安定版に見える以下のバージョンを指定してみると、ODC PortalでのPublish時にエラーが発生。

dotnet add package Microsoft.Extensions.Logging --version 9.0.10

Publish時のコンパイルエラー → どこかでこのライブラリのバージョン8が参照されており、追加した9.0.10との間で整合性が取れていないように見える。

There was an error compiling the generated project. Messages=(Error) Assembly 'ExternalLogicExample1' with identity 'ExternalLogicExample1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' uses 'Microsoft.Extensions.Logging.Abstractions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' which has a higher version than referenced assembly 'Microsoft.Extensions.Logging.Abstractions' with identity 'Microsoft.Extensions.Logging.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'

Version指定をメジャー部分を合わせて8.0.1にしたら解決した。

dotnet add package Microsoft.Extensions.Logging --version 8.0.1

ILoggerオブジェクトをコンストラクタのパラメータとして受け取る

External Logicの本体としてinterfaceを実装したclassを作る。
classのコンストラクタにパラメータとしてILoggerのオブジェクトが渡ってくる。その値をクラスメンバーのフィールドに保存しておく。

public class QiitaSample2 : IQiitaSample2
{
    private readonly ILogger logger;

    public QiitaSample2(ILogger logger)
    {
        this.logger = logger;
    }
    (後略)

Action内でILoggerを使ってログ出力

External Logicに作成するActionは、class内のメソッドに対応する。
メソッド内で以下のようにして、保存済みのILoggerのメソッドを使ってログ出力する。

    public DateTime LogSample1()
    {
        // Log the current date and time
        DateTime currentDateTime = DateTime.Now;

        // この部分がログ出力処理。それぞれ対応するレベルのログをODC Portalに出力する
        logger.LogInformation($"LogSample1 called at: {currentDateTime}");
        logger.LogWarning($"This is a warning log at: {currentDateTime}");
        logger.LogError($"This is an error log at: {currentDateTime}");
        
        return currentDateTime;
    }

動作確認

上記のコード例では以下の3つのログがODC Portal > Logsに出力された。
image.png

ただし、動作確認中は、ログが出たり出なかったりして安定しなかった。
また、出る場合も数分程度のラグがあった。

トレース出力

実装

System.Diagnostics.Activityを使ってAction中で以下のように書くと、Traceの1Spanとして出力される。

using var activity = Activity.Current?.Source.StartActivity("LogSample2 Activity");

Activityが1Spanに対応しており、StartActivityした段階でSpanの開始時間を記録する。ActivityはIDisposableを実装しており、Dispose()メソッドを持つ(usingでマークしてあるのでスコープを抜けると自動で呼ばれるはず)。DisposeするときにSpanの終了時間を記録してトレース情報を送出する。

つまりusing部分も重要。使う時は上のコードをコピーし、パラメータ部分だけを書き換えればよさそう。

動作確認

以下の赤枠部分に出力されている。StartActivityのパラメータに渡した文字列がそのまま表示されるようだ。ちなみに、スクロールされて見えなくなっているが、このSpanは詳細情報に分類されるらしく、"Show details"のアイコン(目のアイコン)をクリックしないと表示されない点に注意。
image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?