记录器不向Azure Function 2.0

时间:2018-08-01 11:15:08

标签: c# .net-core azure-functions nlog

我正在尝试使用Azure功能中标准Tracewriter以外的其他记录器。大多数情况下,NLog在运行Azure功能时都在本地工作,但是在我部署到Azure之后什么也没写。

通过blob加载配置。我将配置文件存储在存储Blob中,并将其作为参数加载

[FunctionName("Update")]
        public static IActionResult Run([HttpTrigger(AuthorizationLevel.Function, "put", Route = null)]HttpRequest req, 
        [Blob("nlog/nlog.config", FileAccess.Read)] string inputBlob)

Logger.LoadConfiguration(inputBlob);
Logger.Info("This does not show in Azure");

...

我在其中加载配置的logger类

public class Logger
    {
        public static Logger Log = LogManager.GetCurrentClassLogger();

        private static bool _isConfigrued;

        public static void LoadConfiguration(string xmlString)
        {
            if (string.IsNullOrEmpty(xmlString))
                return;

            if (!_isConfigrued)
            {
                StringReader sr = new StringReader(xmlString);
                XmlReader xr = XmlReader.Create(sr);
                LogManager.Configuration = new XmlLoggingConfiguration(xr, null);

                Log = LogManager.GetCurrentClassLogger();
                _isConfigrued = true;
            }
        }
    }

然后我将NLog配置为写入跟踪

  <targets>
    <target name='console' type='Console' layout='Console ${message}' />
    <target name="trace" xsi:type="Trace" layout="Trace ${message}" />
  </targets>

 <rules>
    <logger name="*" minlevel="Trace" writeTo="trace" />
    <logger name="*" minlevel="Trace" writeTo="console" /> 
  </rules>

但是没有任何内容写入跟踪/控制台

我也尝试像这里建议的那样加载配置

https://blogs.msdn.microsoft.com/waws/2017/03/16/nlog-and-database/

也没有运气

我也尝试过Microsoft.Extentions.Loggin.Ilogger,它在本地工作,但没有在Azure上打印任何内容。

公正和空的控制台窗口不会引发任何异常。

1 个答案:

答案 0 :(得分:0)

在Azure版本上运行时。 1,然后可以将NLog输出转发到TextWriter记录器:

在Azure版本上运行时。 2,然后可以将NLog输出转发到Microsoft ILogger:

另请参阅:https://github.com/NLog/NLog.Extensions.Logging/wiki/NLog-cloud-logging-with-Azure-function-or-AWS-lambda

另请参阅:https://docs.microsoft.com/en-us/azure/azure-functions/functions-dotnet-class-library

如果需要部署nlog.config,则可能必须将其包含在Azure函数的“应用程序设置”中。另请参见https://stackoverflow.com/a/47332193