【问题标题】:How to setup NLog with Sustainsys.Saml2如何使用 Sustainsys.Saml2 设置 NLog
【发布时间】:2020-05-06 18:59:16
【问题描述】:

我有一个 ASP.Net Web 表单应用程序,我刚刚在其中集成了 Sustainsys.Saml2 库。

我从未使用过任何类型的日志记录机制,我正试图弄清楚如何为其troubleshooting 页面上所述的库添加或创建ILoggerAdapter

我已经决定使用 NLog(请随意推荐一个不同的),或者我不太了解这一点,或者没有使用正确的关键字来搜索我需要/想要的内容,或者他们不是有很多关于它的文档。

目前,我使用的是HttpModule 版本的Sustainsys.Saml2。根据要求提供的任何其他信息。

任何帮助都会很棒。

目前,我正在通过 web.config 和 global.asax 文件配置 Sustainsys.Saml2 库。这是我 global.asax 调用的类:

public class Saml2Config {
    private static bool _alreadyInitialized;
    private static readonly object Lock = new object();

    public static void Initialize() {
        if (_alreadyInitialized) {
            return;
        }

        lock (Lock) {
            if (_alreadyInitialized) {
                return;
            }

            var domain = PageHelper.GetDomainURL(true);

            Sustainsys.Saml2.Configuration.Options.FromConfiguration.SPOptions.EntityId.Id = $"{domain}/federation/Saml2";
            Sustainsys.Saml2.Configuration.Options.FromConfiguration.SPOptions.ModulePath = "/federation/Saml2";
            Sustainsys.Saml2.Configuration.Options.FromConfiguration.SPOptions.ReturnUrl = new Uri($"{domain}/mybarry");
            Sustainsys.Saml2.Configuration.Options.FromConfiguration.SPOptions.PublicOrigin = new Uri($"{domain}");

            Sustainsys.Saml2.Configuration.Options.FromConfiguration.SPOptions.Logger = new NullLoggerAdapter();

            _alreadyInitialized = true;
        }
    }
}

【问题讨论】:

  • Sustainsys.Saml2.Configuration.Options.FromConfiguration.SPOptions.Logger 的类型是什么?有它的 API 文档吗?
  • @Julian 这是一个ILoggerAdapter。我没有看到任何关于它的文档。

标签: c# nlog sustainsys-saml2


【解决方案1】:

The interface 非常简单

public interface ILoggerAdapter
{
    void WriteInformation(string message);

    void WriteError(string message, Exception ex);

    void WriteVerbose(string message);
}

我会按如下方式实现:

public class NLogAdapter : ILoggerAdapter
{
    private static Logger Logger = LogManager.GetLogger("Saml2");

    public void WriteInformation(string message)
    {
        Logger.Info(message);
    }

    public void WriteError(string message, Exception ex)
    {
        Logger.Error(ex, message);
    }

    public void WriteVerbose(string message)
    {
        Logger.Debug(message);
    }
}

最后设置它:

Sustainsys.Saml2.Configuration.Options.FromConfiguration.SPOptions.Logger = new NLogAdapter();

【讨论】:

  • 谢谢!这也奏效了。尽管我根据上一个答案进行了工作,但由于您提供了一个完整的工作示例,因此我将其标记为答案,以便其他人更容易理解。
【解决方案2】:

ILoggerAdapter 包含不同日志级别的方法。创建一个实现ILoggerAdapter 并写入NLog 的适配器类。然后将SPOptions.Logger 设置为您的适配器类的一个实例。

如果您想要一个示例,您可以查看 Asp.Net Core 的适配器,该适配器记录到 Asp.Net Core 日志系统,它是 Sustainsys.Saml2.AspNetCore2 包的默认设置:https://github.com/Sustainsys/Saml2/blob/master/Sustainsys.Saml2.AspNetCore2/AspNetCoreLoggerAdapter.cs

对于Sustainsys.Saml2.HttpModule 库,默认值为NullLoggerAdapter,它只是丢弃所有日志。使用它的唯一原因是不必在任何使用它的地方对 Logger 属性进行空检查(该代码是在引入 ?. 语法之前编写的。)

【讨论】:

  • 谢谢!我会试试看(需要看看为什么它不会触发注销 IDP)。
  • 触发联合注销的逻辑相当复杂。有一条记录所有条件的日志消息,因此记录器肯定会有所帮助。 github.com/Sustainsys/Saml2/blob/…
  • 谢谢,它成功了。对于要求,日志中的所有值都是空白的,所以我需要做一些事情。尽管我遵循了您的指示,但我将给予下一个答案,因为它会更容易让其他人看到。希望我能同时标记。
  • 您好,我发布了一个后续问题:stackoverflow.com/questions/61663562/…
猜你喜欢
  • 1970-01-01
  • 2018-07-16
  • 1970-01-01
  • 2023-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多