我在本地开发ASP.NET MVC应用程序并使用Log4Net使用以下连接字符串(log4net.config)在本地数据库上记录消息:
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="Data Source=.\;Initial Catalog=MyDatabase;Integrated Security=True" />
这非常有效(数据库条目出现在Log表中)。
现在我想登录到远程azure数据库服务器,所以我只是将连接字符串更改为以下内容:
<connectionString value="Data Source=mydb.database.windows.net,1433;Initial Catalog=MyDatabase;User ID=username@mydb;Password=mypassword;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;" />
我在防火墙中插入了我的IP地址(作为证据,我可以通过我的机器上的SQL Studio连接到azure数据库实例)。
调试应用程序时,我没有看到log4net引起的任何异常。
我使用castle-windsor在需要的地方注入ILogger,这是我的安装程序:
public class LoggerInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.AddFacility<LoggingFacility>(f => f.UseLog4Net().WithConfig("Configuration\\log4net.config"));
}
}
azure数据库实例上的数据库是本地数据库的完全副本(相同的创建脚本)。
但远程数据库中没有任何内容。我究竟做错了什么?我该如何找出问题?
非常感谢
答案 0 :(得分:2)
如果失败,Log4net将永远不会抛出异常。它旨在不与您的应用程序进行交互。找到lognet未记录原因的最快方法是启用内部log4net日志记录:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
</configuration>
OR
<configuration>
...
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add
name="textWriterTraceListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="C:\tmp\log4net.txt" />
</listeners>
</trace>
</system.diagnostics>
...
</configuration>