監査、診断、追跡のためのカスタム リスナーの作成
リスナーにより、ファイル、イベント ログ、または他のソースに出力するログを対象にすることができます。 以前のバージョンの Unified Service Desk までは、Unified Service Desk への監査ログ、診断ログ、およびトレース ログの書き込みに使用できたのは標準リスナーのみでした。
Unified Service Desk 2.0 では、カスタム リスナーを構成すると、監査、診断、およびトレースのデータを記録できます。 カスタム リスナー コードが記述されたアセンブリ (.dll ファイル) への参照を含む、リスナーのホストされたコントロールと呼ばれるホストされたコントロールの新しいタイプを使ってカスタム リスナーを指定します。
カスタム リスナーの作成に含まれる作業
Unified Service Desk でカスタム リスナーを作成して使うには、開発者と管理者の連携が必要です。 次の表では、プロセスについて説明します。
ステップ | 作業者 | タスク | 参照先 |
---|---|---|---|
1 | Developer | カスタム リスナーのコードを記述する。 | Unified Service Desk のカスタム リスナーを定義する |
2 | Developer | アセンブリを .zip ファイルに圧縮して、Unified Service Desk のカスタマイズ ファイルを作成します。 | サンプル コードの配布を準備する |
3 | 開発者/管理者 | カスタム リスナーのコードを使ってリスナーのホストされたコントロールのインスタンスを作成します。 | カスタム リスナーのコードを使ってリスナーのホストされたコントロールのインスタンスを作成する |
4 | 管理者 | 監査と診断の設定レコードのインスタンスを作成して、ログ情報の監査、診断、またはトレースを構成します。 | Unified Service Desk で監査と診断を構成する |
5 | 管理者 | カスタマイズ ファイルを作成して、手順 2 の開発者が作成した .zip ファイルを添付します。 | カスタマイズ ファイルを使用したカスタムのホストされたコントロールの配布 |
6 | 管理者 | カスタマイズ ファイルレコードを構成エンティティの適切なインスタンスに添付します。 | 監査と診断を構成に関連付ける |
Unified Service Desk のカスタム リスナーを定義する
1 つのアセンブリまたは複数の異なるアセンブリへのログインを監査、診断、およびトレースするために、カスタム リスナーにコードを統合できます。 リスナー コードを含むクラスは、次から取得する必要があります。
監査ログ用の IAuditService
診断ログ用の ILogging
トレース ログ用の TraceListener
Note
リスナー コードの名前空間とクラス名をメモします。 カスタム コードを表すためにリスナーのホストされたコントロールのインスタンスを作成するには、これらが必要です。
監査ログ用のカスタム リスナー
次のサンプル コードは、C:\USDLogs フォルダーの USDAudit.log ファイルに監査データを書き込むカスタム リスナーを作成する方法を示しています。
using Microsoft.Uii.AifServices;
using Microsoft.Uii.Common.Entities;
using Microsoft.Uii.Common.Logging;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SampleCustomUSDListener
{
public class CustomUSDAuditListener : IAuditService
{
public void SaveAudit(IEnumerable<Microsoft.Uii.Common.Entities.LogData> logCache)
{
LogToFile(logCache);
}
private void LogToFile(IEnumerable<LogData> logCache)
{
string filename = Path.GetPathRoot(Environment.SystemDirectory) + "USDLogs\\USDAudit.log";
foreach (var item in logCache)
{
try
{
File.AppendAllText(filename, item.GetLogData());
}
catch (Exception ex)
{
Logging.Error("USD",ex.StackTrace);
}
}
}
}
}
診断ログ用のカスタム リスナー
次のサンプル コードは、C:\USDLogs フォルダーの USDDiagnostics.log ファイルに診断データを書き込むカスタム リスナーを作成する方法を示しています。
using Microsoft.Uii.Common.Logging;
using Microsoft.Uii.Common.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Configuration;
using System.Threading.Tasks;
namespace SampleCustomUSDListener
{
class CustomUSDDiagnosticListener : ILogging
{
string filename = Path.GetPathRoot(Environment.SystemDirectory) + "USDLogs\\USDDiagnostics.log";
public void Error(string applicationName, string message, string advanced)
{
File.AppendAllText(filename, "\nError is logged\n" + "\nApplication Name:\n" + applicationName + "\nMessage:\n" + message + "\nAdvanced:\n" + advanced);
}
public void Information(string applicationName, string message)
{
File.AppendAllText(filename, "\nInformation is logged\n" + "\nApplication Name:\n" + applicationName + "\nMessage:\n" + message);
}
public void Initialize(string name, System.Collections.Specialized.NameValueCollection configValue)
{
//Not needed
}
public bool ShowErrors
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
public string Tag
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
public void Trace(string applicationName, string message)
{
File.AppendAllText(filename, "\nVerbose is logged\n" + "\nApplication Name:\n" + applicationName + "\nMessage:\n" + message);
}
public void Warn(string applicationName, string message)
{
File.AppendAllText(filename, "\nWarning is logged\n" + "\nApplication Name:\n" + applicationName + "\nMessage:\n" + message);
}
}
}
トレース ログ用のカスタム リスナー
次のサンプル コードは、C:\USDLogs フォルダーの USDTraces.log ファイルにトレース データを書き込むカスタム リスナーを作成する方法を示しています。
using System;
using System.Diagnostics;
using System.IO;
namespace SampleCustomUSDListener
{
class CustomUSDTraceListener : TraceListener
{
string filename = Path.GetPathRoot(Environment.SystemDirectory) + "USDLogs\\USDTraces.log";
public override void Write(string message)
{
File.AppendAllText(filename, message);
}
public override void WriteLine(string message)
{
File.AppendAllText(filename, message);
}
}
}
サンプル コードの配布を準備する
カスタム リスナーのコードをアセンブリ (.dll) ファイルに組み込んだら、カスタム リスナーを使えるように、管理者と協力してクライアント コンピューターにコードを配布します。 カスタム ファイルを配布するには、このファイルを [Content_Types].xml
ファイルと合わせて .zip ファイルに圧縮し、この .zip ファイルを管理者に渡して Customization Files
レコードに添付します。 管理者の次の手順 を参照してください。
[Content_Types].xml ファイルは、.zip ファイルに含まれるファイルの種類の拡張子の MIME の種類の情報を提供します。 通常、ファイルの種類は .config、.dll、.exe、.xml です。 ただし、Windows でサポートされているすべてのファイルの種類を [Content_Types].xml ファイルと zip ファイルに含めることができます。
ここでは、[Content_Types].xml ファイルのサンプルと、Unified Service Desk のカスタマイズに通常使われるファイルの種類を示します:
<?xml version="1.0" encoding="utf-8"?>
<Types xmlns="https://schemas.openxmlformats.org/package/2006/content-types">
<Default Extension="config" ContentType="application/octet-stream" />
<Default Extension="dll" ContentType="application/octet-stream" />
<Default Extension="exe" ContentType="application/octet-stream" />
<Default Extension="xml" ContentType="application/octet-stream" />
</Types>
カスタム リスナーのコードを使ってリスナーのホストされたコントロールのインスタンスを作成する
Unified Service Desk の新しいリスナーのホストされたコントロールにより、カスタム リスナーのコードを参照して使うことで、コードごとにデータを記録できます。 [新しいホストされたコントロール] 画面のアセンブリ情報領域では、リスナーのホストされたコントロールで参照するアセンブリの詳細を指定できます。 アセンブリの URI フィールドでアセンブリ (.dll) の名前を、さらにアセンブリの種類フィールドで <AssemblyName>.<ClassName> を指定します。 <ClassName> には、コードを含むクラスを指定する必要があります。
たとえば、このトピックの前半のカスタム リスナーのサンプル コードで、SampleCustomUSDListener.dll と呼ばれる 1 つのアセンブリにすべてのサンプル コードをコンパイルすると仮定した場合、アセンブリ URI フィールドとアセンブリの種類フィールドで次の値を設定して、監査、診断、およびトレースごとにリスナーのホストされたコントロールのレコードを作成する必要があります。
監査 | 診断 | トレース |
---|---|---|
-
アセンブリ URI: SampleCustomUSDListener - アセンブリの種類: SampleCustomUSDListener.CustomUSDAuditListener |
-
アセンブリ URI: SampleCustomUSDListener - アセンブリの種類: SampleCustomUSDListener.CustomUSDDiagnosticListener |
-
アセンブリ URI: SampleCustomUSDListener - アセンブリの種類: SampleCustomUSDListener.CustomUSDTraceListener |
リスナーのホストされたコントロールのレコードを保存します。
管理者の次の手順
管理者として、組織内でカスタム リスナーのコードを使うには、次の 2 つの操作を実行できるようになる必要があります。
監査と診断の設定レコードを作成して、リスナーのホストされたコントロールの適切なレコードを添付します。 詳細: Unified Service Desk で監査と診断を構成する
.zip ファイルを使ってカスタマイズ ファイル レコードを作成し、このレコードを適切な構成レコードに添付します。これにより、クライアント コンピューターが Unified Service Desk クライアントを使って Dynamics 365 server にサインインする際に、アセンブリがクライアント コンピューターに配布されるようになります。 詳細: カスタマイズ ファイルを使用してカスタム ホスト コントロールを配布する