MSAL for iOS/macOS 中的日志记录

Microsoft 身份验证库 (MSAL) 应用生成日志消息,这些消息可以用来诊断问题。 应用可以通过数行代码配置日志记录,并可对详细程度以及是否记录个人和组织数据进行自定义控制。 建议创建 MSAL 日志记录实现,并提供一种方式来让用户在遇到身份验证问题时提交日志。

日志记录级别

MSAL 提供多个日志记录详细级别:

  • LogAlways:此日志级别不执行级别筛选。 将记录所有级别的日志消息。
  • 严重:描述不可恢复的应用程序/系统崩溃或需要立即引起注意的灾难性故障的日志。
  • 错误:指示出现问题并已生成错误。 用于调试并确定问题。
  • 警告:不一定会出现错误或故障,只是为了诊断和指出问题。
  • 信息:MSAL 将要记录的事件可为用户提供信息,不一定用于调试。
  • 详细(默认值):MSAL 将记录库行为的完整详细信息。

注意

并非所有日志级别都适用于所有 MSAL SDK

个人和组织数据

默认情况下,MSAL 记录器不捕获任何高度敏感的个人或组织数据。 该库提供相关选项,允许你自行决定是否记录个人和组织数据。

以下各节将详细介绍应用程序的 MSAL 错误日志记录。

适用于 iOS 和 macOS 的 MSAL 日志记录 - ObjC

设置一个回调来捕获 MSAL 日志记录,并将其合并到自己应用程序的日志记录中。 回调的签名如下所示:

/*!
    The LogCallback block for the MSAL logger

    @param  level           The level of the log message
    @param  message         The message being logged
    @param  containsPII     If the message might contain Personally Identifiable Information (PII)
                            this will be true. Log messages possibly containing PII will not be
                            sent to the callback unless PIllLoggingEnabled is set to YES on the
                            logger.

 */
typedef void (^MSALLogCallback)(MSALLogLevel level, NSString *message, BOOL containsPII);

例如:

[MSALGlobalConfig.loggerConfig setLogCallback:^(MSALLogLevel level, NSString *message, BOOL containsPII)
    {
        if (!containsPII)
        {
#if DEBUG
            // IMPORTANT: MSAL logs may contain sensitive information. Never output MSAL logs with NSLog, or print, directly unless you're running your application in debug mode. If you're writing MSAL logs to file, you must store the file securely.
            NSLog(@"MSAL log: %@", message);
#endif
        }
    }];

个人数据

默认情况下,MSAL 不会捕获或记录任何个人数据。 库允许应用开发人员通过 MSALLogger 类中的某个属性启用该功能。 启用 pii.Enabled 日志记录后,应用负责安全地处理高度敏感的数据并遵守任何法规要求。

// By default, the `MSALLogger` doesn't capture any PII

// PII will be logged
MSALGlobalConfig.loggerConfig.piiEnabled = YES;

// PII will NOT be logged
MSALGlobalConfig.loggerConfig.piiEnabled = NO;

日志记录级别

若要在使用适用于 iOS 和 macOS 的 MSAL 进行日志记录时设置日志记录级别,请使用以下值之一:

Level 说明
MSALLogLevelNothing 禁用所有日志记录
MSALLogLevelError 默认级别,仅在发生错误时输出信息
MSALLogLevelWarning 警告
MSALLogLevelInfo 库入口点,包含参数和各种密钥链操作
MSALLogLevelVerbose API 跟踪

例如:

MSALGlobalConfig.loggerConfig.logLevel = MSALLogLevelVerbose;

日志消息格式

MSAL 日志消息的消息部分采用 TID = <thread_id> MSAL <sdk_ver> <OS> <OS_ver> [timestamp - correlation_id] message 格式

例如:

TID = 551563 MSAL 0.2.0 iOS Sim 12.0 [2018-09-24 00:36:38 - 36764181-EF53-4E4E-B3E5-16FE362CFC44] acquireToken returning with error: (MSALErrorDomain, -42400) User cancelled the authorization session.

提供关联 ID 和时间戳有助于跟踪问题。 时间戳和关联 ID 信息在日志消息中提供。 只能从 MSAL 日志记录消息中可靠地检索这些信息。

后续步骤

有关更多代码示例,请参阅 Microsoft 标识平台代码示例