我正在使用新的Azure功能应用程序(AFA)作为更大的应用程序的一部分。 AFA是一个C#DLL,它引用了应用程序常用的其他DLL。较大的应用程序具有自定义跟踪侦听器,可以跟踪到SQL数据库并将其他信息附加到消息中。我们通过App.config
/ Web.config
进行配置。我无法理解这应该如何在C#DLL库AFA中运行(或者如果它无法工作)。
在App.config
文件中,我们为(EF)数据库,共享侦听器,源,交换机和添加侦听器定义连接字符串。 E.g:
<configuration>
<!-- ... lots of stuff ... -->
<connectionStrings>
<add name="MyAppLogDb" providerName="System.Data.SqlClient" connectionString="..."/>
</connectionStrings>
<system.diagnostics>
<sharedListeners>
<add name="sql" type="MyApp.EntityFrameworkTraceListener, MyApp" initializeData="MyApp">
<filter type="System.Diagnostics.EventTypeFilter" initializeData="Information" />
</add>
<add name="console" type="System.Diagnostics.ConsoleTraceListener">
<filter type="System.Diagnostics.EventTypeFilter" initializeData="Verbose" />
</add>
</sharedListeners>
<sources>
<source name="System.ServiceModel.MessageLogging">
<listeners>
<add name="sql" />
</listeners>
</source>
<source name="MyApp" switchName="default" switchType="System.Diagnostics.SourceSwitch">
<listeners>
<add name="console" />
<add name="sql" />
</listeners>
</source>
</sources>
<switches>
<add name="default" value="Verbose" />
</switches>
<trace autoflush="true" useGlobalLock="false">
<listeners>
<add name="console" />
<add name="sql" />
</listeners>
</trace>
</system.diagnostics>
<system.serviceModel>
<diagnostics>
<messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="false" maxMessagesToLog="2147483647" maxSizeOfMessageToLog="256000" />
</diagnostics>
</system.serviceModel>
</configuration>
关于system.serviceModel
元素:我们还使用此配置来捕获和记录WCF XML消息,以帮助调试与第三方的API问题。
通常,当我们跟踪邮件时,我们会使用自定义TraceSource
,它会自动填充额外的位,但我们也会进行正常的Trace.TraceInformation
和WriteLine
类型调用。
有没有办法用Azure功能应用程序复制它?我是否需要对这些内容进行硬编码并在代码中创建所有内容?
更新1:要清楚,原始配置无法正常工作(我真的没想到它会神奇地工作)。我尝试在代码中创建监听器并将其添加到诊断集合中,但这也没有用。我通过本地AFA主机(NPM包func host start
)进行测试,它们既没有登录到控制台/主机也没有登录到数据库。螺母。
更新2:即使直接写入数据库也不起作用,但不会记录任何错误。当我打电话给SaveChanges时,它只是默默无闻......