创建用于审核、诊断和跟踪的自定义侦听器
发布日期: 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 |
管理员 |
创建“审核和诊断设置”记录的实例以配置审核、诊断或跟踪日志记录信息。 |
|
5 |
管理员 |
创建“自定义文件”,并附加开发人员在步骤 2 中创建的 .zip 文件。 |
|
6 |
管理员 |
将“自定义文件”记录附加到“配置”实体的相应实例。 |
为 Unified Service Desk 定义自定义侦听器
您可以将用于审核、诊断和跟踪日志记录的自定义侦听器的代码合并成单个程序集或不同的程序集。 包含侦听器代码的类必须从以下侦听器生成:
用于审核日志的 IAuditService
用于诊断日志的 ILogging
用于跟踪日志的 TraceListener
备注
记下侦听器代码中的命名空间和类名称。 您需要这些信息创建侦听器托管控件的实例,以引用自定义代码。
用于审核日志的自定义侦听器
以下示例代码演示如何创建将审核数据写入 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 的单个程序集中,您必须使用“程序集 URI”字段和“程序集类型”字段中的以下值为审核、诊断和跟踪各创建一条侦听器托管控件记录。
审核 |
诊断 |
跟踪 |
---|---|---|
|
|
|
保存侦听器托管控件记录。
管理员的后续步骤
作为管理员,您现在应执行以下两项操作以在组织中使用自定义侦听器代码:
创建“审核和诊断设置”记录,并向其附加相应的侦听器托管控件记录。详细信息:TechNet:在 Unified Service Desk 中配置审核和诊断
使用 .zip 文件创建“自定义文件”记录并将其附加到相应的“配置”记录中,以便在客户端计算机使用 Unified Service Desk 客户端登录 Dynamics 365 服务器时,能够向这些计算机分发程序集。详细信息:TechNet:使用自定义文件分发自定义托管控件
另请参阅
Unified Service Desk 2.0
© 2017 Microsoft。 保留所有权利。 版权