如何重用天文函数中可用的TraceWriter对象来记录外部引用库中的信息?我尝试使用构造函数传递对象并引用TraceWriter类(web.http.tracing).我没有运气,因为班级似乎不一样.

解决方法

短版
使用 this nuget package中提供的Microsoft.Azure.WebJobs.Host.TraceWriter.

或者,将您的功能构建为Web项目,您可以在本地进行调试. You can find a sample here.

长版

你的问题在于你使用的是错误的TraceWriter.

我使用Azure函数中的Azure函数记录器来输出记录器的类型.

log.Info(log.GetType().ToString());

其中给出以下内容:

Microsoft.Azure.WebJobs.Script.InterceptingTraceWriter

我也期待着一个Web / Http TraceWriter,并且惊讶于还有一个处理方法.微软真的可以通过创建一个标准的方法,或至少给我们一个很好的干净的界面,错误,警告,信息,详细等.

我将创建自己的界面,并包装我的应用程序记录器和Azure,以便我可以注入我所需要的,而不会在我的代码中进一步引起头痛.这也将为未来突破性变化所造成的潜在痛苦提供一些保护.

无论如何,我离题,然后我跟踪Microsoft.Azure.WebJobs.Script.InterceptingTraceWriter到Azure Functions / Webjobs scripting GitHub repo,然后到Nuget包.我已经测试了这一点,将Azure功能记录器传递到外部程序集并继续登录到Azure功能环境.

这是一个例子:

using Microsoft.Azure.WebJobs.Host;

public static void TryLog(TraceWriter azureFunctionsLogger)
{
    azureFunctionsLogger.Info("************** IT WORKED **************");
}

我喜欢Azure功能的潜力,但它仍然有点不成熟,过于复杂.

我希望这有帮助.

添加了一个非常简单的单一类记录器来说明.

它写入Azure功能记录器或标准的Systems.Diagnostics.Trace.您需要将其粘贴到标准C#控制台应用程序的Program.cs的内容上.您还需要包含Nuget软件包Microsoft.Azure.WebJobs.

namespace LoggingTestConsole
{
    using System;

    /// <summary>
    /// Generic logging interface for portability 
    /// </summary>
    public interface ILogger
    {
        void Error(string message);
        void information(string message);
        void Warning(string message);
    }


    /// <summary>
    /// Azure Functions logger
    /// </summary>
    public class AzureFunctionLogger : ILogger
    {
        private static Microsoft.Azure.WebJobs.Host.TraceWriter _logger;

        public AzureFunctionLogger(Microsoft.Azure.WebJobs.Host.TraceWriter logger)
        {
            _logger = logger;
        }

        public void Error(string message)
        {
            _logger.Error(message);
        }

        public void information(string message)
        {
            _logger.Info(message);
        }

        public void Warning(string message)
        {
            _logger.Warning(message);
        }
    }


    /// <summary>
    /// Windows Trace logger
    /// </summary>
    public class TraceLogger : ILogger
    {
        public TraceLogger()
        {
            System.Diagnostics.Trace.Listeners.Add(new System.Diagnostics.TextWriterTraceListener(Console.Out));
        }

        public void Error(string message)
        {
            System.Diagnostics.Trace.TraceError(message);
        }


        public void information(string message)
        {
            System.Diagnostics.Trace.Traceinformation(message);
        }

        public void Warning(string message)
        {
            System.Diagnostics.Trace.TraceWarning(message);
        }

        public void Warning(string format,params object[] args)
        {
            System.Diagnostics.Trace.TraceWarning(format,args);
        }
    }

    /// <summary>
    /// You would put this in a separate project and just share the ILogger interface.
    /// Pass the relevant logger in from Azure Functions or a standard windows Trace logger.
    /// </summary>
    public class DoStuff
    {
        public DoStuff(ILogger logger)
        {
            logger.information("We are logging to logger you passed in!");
        }
    }

    public class Program
    {

        /// <summary>
        /// Sample usage
        /// </summary>
        static void Main(string[] args)
        {
            // var loggerEnvironment = "AzureFunctions";
            var loggerEnvironment = "ConsoleApp";

            ILogger logger = null;

            if (loggerEnvironment == "AzureFunctions")
            {
                Microsoft.Azure.WebJobs.Host.TraceWriter azureFunctionLogger = null;
                logger = new AzureFunctionLogger(azureFunctionLogger);
            }
            else if (loggerEnvironment == "ConsoleApp")
            {
                logger = new TraceLogger();
            }

            var doStuff = new DoStuff(logger);
            Console.ReadKey();
        }
    }
}

c# – Azure函数在外部库中使用TraceWriter进行日志记录的更多相关文章

  1. 到达特定日期时的电子邮件通知-Microsoft Azure

    是否有方法在到达某个日期时接收电子邮件通知?因为在我的基础架构中,我使用的是oAuth2.0API逻辑,我希望在令牌生成的客户端密钥即将过期时得到通知。我已经看到,在AzureMonitor警报规则中,有必要选择目标资源和范围,但我要创建的通知仅基于所选日期。

  2. Azure服务自动锁定续订无法与消费者的多个副本一起使用

    5分钟的TTL在队列级别配置,自动锁定续订持续时间在消费者级别配置为10分钟。如果消费者的单个副本的消息处理时间超过5分钟,则自动锁定续订功能可以正常工作。如果我将消费者的副本数增加到2,则第二个副本将在第一个副本更新锁时开始消息处理。请有人帮助了解问题并建议所需的修复方法。

  3. 无法通过MQTT将RFID设备连接到Azure IoT集线器

    我有一个RFID设备,可以通过MQTT提供数据。我尝试将其连接到我的Azure物联网中心,但没有发生任何事情。有什么想法如何使这项工作?

  4. Azure表存储-TableClient未返回ETag

    我的实体根据需要继承ITableEntity,因此具有ETag属性。任何想法都非常感谢。

  5. 防止数据工厂中的字段更新

    我正在编写一个数据流,其中我对CosmosDBNoSQL数据库进行了升级。我的目标是使用一个名为batch的字段来跟踪特定文档的插入日期,也就是说,我希望此字段不会在更新时发生更改。我看到AlterRow操作不允许我选择哪些字段要部分取消启动或不启动。有没有办法做到这一点?

  6. 如何在没有公司代理管理权限的情况下,在锁定的windows 10上安装az-cli?

    我找了很长一段时间想知道如何做到这一点,但我找到的一切都以某种升高的外壳状况告终。由于公司限制,我无法配置powershell代理。

  7. Azure SQL数据库存储过程仅以SA用户身份运行

    我在Azure上托管了一个ASP.NETMVC应用程序。我使用OpenIdConnect/Owin和AzureAD集成进行身份验证。我有一个错误日志表,其中UserId列仅显示SA用户名。我已经授予了对我的用户帐户的执行权限,但列继续设置为SA用户名。如何让存储过程以创建/更新记录的用户的身份运行,以将UserId、CreatedBy和ModifiedBy列设置为其用户名?当我将应用程序部署到Azure时,在发布->;设置->;数据库,为DbContexts输入连接字符串。

  8. 连接到Microsoft Azure订阅失败

    在VisualStudio2013Update4(和更新5CTP2)中,工具/连接到MicrosoftAzure订阅立即失败,但出现错误:“登录过程中发生错误:authentication_ui_Failed:基于浏览器的身份验证对话框因未知原因无法完成”知道怎么解决这个问题吗?我可以通过Azure门户网站登录.我还尝试在AzureWeb项目中添加新部署.它会显示“部署到资源组”对话框,但不会在“

  9. .net – 无法访问Windows azure文件存储文件

    我在WindowsAzure中创建了一个文件存储并上传了一些文档.这是我的文件路径看起来像https://mySite.file.core.windows.net/notes/txt.pdf当我尝试从我的存储中访问一个文件时,我收到此错误:这是预期的行为.请注意,存储在文件存储中的文件不允许匿名访问.访问需要授权.由于您尝试在未经授权的情况下访问资源,因此您收到此错误.授权访问的一种方法是在具有读

  10. Microsoft Azure CDN是真正的CDN还是其他什么?

    我是否应该将所有内容从我的网站上传到AzureCDN?我希望有人可以指出我不理解的内容,或者让我知道我是否在浪费时间尝试使用AzureCDN,因为我会使用真正的CDN.CDN就是您所期望的.请注意,DNS更改可能需要(实际)长达一个小时才能在全球范围内传播.CDN要么位于blob存储帐户或Web应用程序的前面.请注意,自定义域和CDN是分开的,因此您可以仅针对原始CDNURL进行测试,以确保所有内容都已设置,稍后会担心自定义域.您的CDN端点是否位于blob存储之上?

随机推荐

  1. c# – (wpf)Application.Current.Resources vs FindResource

    所以,我正在使用C#中的WPF创建一个GUI.它看起来像这样:它现在还没有完成.这两行是我尝试制作一种数据表,它们在XAML中是硬编码的.现在,我正在C#中实现添加新的水果按钮功能.我在XAML中有以下样式来控制行的背景图像应该是什么样子:因此,在代码中,我为每列col0,col1和col2创建一个图像,如果我使用以下代码,它添加了一个如下所示的新行:如你所见,它不太正确……为什么一个似乎忽略了一些属性而另一个没有?

  2. c# – 绑定DataGridTemplateColumn

    似乎我已经打了个墙,试图在DataGrid上使用DataTemplates.我想要做的是使用一个模板来显示每个单元格的两行文本.但是似乎无法以任何方式绑定列.以下代码希望显示我想做的事情.注意每个列的绑定:模板列没有这样的东西,因此,这个xaml不可能工作.我注定要将整个DataTemplate复制到每个列,只是对每个副本都有不同的约束?解决方法我不完全确定你想要做什么,但如果您需要获取整行的DataContext,可以使用RelativeSource绑定来移动视觉树.像这样:

  3. c# – 学习设计模式的资源

    最近我来到了这个设计模式的概念,并对此感到非常热情.你能建议一些帮助我深入设计模式的资源吗?

  4. c# – 是否有支持嵌入HTML页面的跨操作系统GUI框架?

    我想开发一个桌面应用程序来使用跨系统,是否有一个GUI框架,允许我为所有3个平台编写一次代码,并具有完全可脚本化的嵌入式Web组件?我需要它有一个API来在应用程序和网页之间进行交流.我知道C#,JavaScript和一些python.解决方法Qt有这样的事情QWebView.

  5. c# – 通过字符串在对象图中查找属性

    我试图使用任意字符串访问嵌套类结构的各个部分.给出以下(设计的)类:我想要从Person对象的一个实例的“PersonsAddress.HousePhone.Number”获取对象.目前我正在使用反思来做一些简单的递归查找,但是我希望有一些忍者有更好的想法.作为参考,这里是我开发的(crappy)方法:解决方法您可以简单地使用标准的.NETDataBinder.EvalMethod,像这样:

  6. c# – 文件下载后更新页面

    FamilyID=0a391abd-25c1-4fc0-919f-b21f31ab88b7&displaylang=en&pf=true它呈现该页面,然后使用以下元刷新标签来实际向用户提供要下载的文件:你可能需要在你的应用程序中做类似的事情.但是,如果您真的有兴趣在文件完全下载后执行某些操作,那么您的运气不佳,因为没有任何事件可以与浏览器进行通信.执行此操作的唯一方法是上传附件时使用的AJAXupload.

  7. c# – 如何在每个机器应用程序中实现单个实例?

    我必须限制我的.net4WPF应用程序,以便每台机器只能运行一次.请注意,我说每个机器,而不是每个会话.我使用一个简单的互斥体实现单实例应用程序,直到现在,但不幸的是,这样一个互斥是每个会话.有没有办法创建机器互连,还是有其他解决方案来实现每个机器应用程序的单个实例?

  8. c# – WCF和多个主机头

    我的雇主网站有多个主机名,都是同一个服务器,我们只是显示不同的皮肤来进行品牌宣传.不幸的是,在这种情况下,WCF似乎不能很好地工作.我试过overridingthedefaulthostwithacustomhostfactory.这不是一个可以接受的解决方案,因为它需要从所有主机工作,而不仅仅是1.我也看过thisblogpost,但是我无法让它工作,或者不是为了解决我的问题.我得到的错误是“这

  9. c# – ASP.NET MVC模型绑定与表单元素名称中的虚线

    我一直在搜索互联网,试图找到一种方式来容纳我的表单元素的破折号到ASP.NET的控制器在MVC2,3或甚至4中的默认模型绑定行为.作为一名前端开发人员,我更喜欢在我的CSS中使用camelCase或下划线进行破折号.在我的标记中,我想要做的是这样的:在控制器中,我会传入一个C#对象,看起来像这样:有没有办法通过一些正则表达式或其他行为来扩展Controller类来适应这种情况?我讨厌这样的事实,我必须这样做:甚至这个:思考?

  10. c# – 用户界面设计工具

    我正在寻找一个用户界面设计工具来显示文档中可能的GUI.我不能生成代码.我知道MicrosoftVisio提供了一个功能.但有什么办法吗?您使用哪种软件可视化GUI?

返回
顶部