監査、診断、追跡のためのカスタム リスナーの作成

 

公開日: 2016年11月

対象: Dynamics 365 (online)、Dynamics 365 (on-premises)、Dynamics CRM 2013、Dynamics CRM 2015、Dynamics CRM 2016

リスナーにより、ファイル、イベント ログ、または他のソースに出力するログを対象にすることができます。 以前のバージョンの Unified Service Desk まで、Unified Service Desk への監査ログ、診断ログ、およびトレース ログの書き込みに使えるのは、標準リスナーだけでした。

Unified Service Desk 2.0 では、カスタム リスナーを構成すると、監査、診断、およびトレースのデータを記録できます。 カスタム リスナー コードが記述されたアセンブリ (dll ファイル) への参照を含む、リスナーのホストされたコントロールと呼ばれるホストされたコントロールの新しいタイプを使ってカスタム リスナーを指定します。

このトピックの内容

カスタム リスナーの作成に含まれる作業

Unified Service Desk のカスタム リスナーを定義する

サンプル コードの配布を準備する

カスタム リスナーのコードを使ってリスナーのホストされたコントロールのインスタンスを作成する

管理者の次の手順

カスタム リスナーの作成に含まれる作業

Unified Service Desk でカスタム リスナーを作成して使うには、開発者と管理者の連携が必要です。 次の表では、プロセスについて説明します。

ステップ

作業者

タスク

参照先

1

開発者

カスタム リスナーのコードを記述する。

Unified Service Desk のカスタム リスナーを定義する

2

開発者

アセンブリを .zip ファイルに圧縮して、Unified Service Desk のカスタマイズ ファイルを作成する。

サンプル コードの配布を準備する

3

開発者/管理者

カスタム リスナーのコードを使ってリスナーのホストされたコントロールのインスタンスを作成する。

カスタム リスナーのコードを使ってリスナーのホストされたコントロールのインスタンスを作成する

4

管理者

[監査と診断の設定] レコードのインスタンスを作成して、ログ情報の監査、診断、またはトレースを構成する。

TechNet: Unified Service Desk で監査と診断を構成する

5

管理者

[カスタマイズ ファイル] を作成して、手順 2 の開発者が作成した .zip ファイルを添付する。

TechNet: カスタマイズ ファイルを使用してカスタム ホスト コントロールを配布する

6

管理者

[カスタマイズ ファイル] レコードを [構成] エンティティの適切なインスタンスに添付する。

TechNet: 監査と診断を構成に関連付ける

Unified Service Desk のカスタム リスナーを定義する

1 つのアセンブリまたは複数の異なるアセンブリへのログインを監査、診断、およびトレースするために、カスタム リスナーにコードを統合できます。 リスナー コードを含むクラスは、次から取得する必要があります。

注意

リスナー コードの名前空間とクラス名をメモします。 カスタム コードを表すためにリスナーのホストされたコントロールのインスタンスを作成するには、これらが必要です。

監査ログ用のカスタム リスナー

次のサンプル コードは、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 2.0

© 2017 Microsoft. All rights reserved. 著作権