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に出力された。

ただし、動作確認中は、ログが出たり出なかったりして安定しなかった。
また、出る場合も数分程度のラグがあった。
トレース出力
実装
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"のアイコン(目のアイコン)をクリックしないと表示されない点に注意。
