如何使用log4net处理Windows Azure SQL Database连接字符串(附web.config示例)
如何用log4net处理Windows Azure SQL Database的连接字符串?
没问题,我来帮你一步步梳理怎么用log4net处理Windows Azure SQL Database的连接字符串,结合你给出的示例,具体操作如下:
1. 先把连接字符串放到web.config的连接字符串节点
首先建议把Azure SQL的连接字符串单独配置在web.config的<connectionStrings>节点里,这样既方便维护,也能让log4net直接引用,避免硬编码:
<connectionStrings> <add name="AzureSqlLogConn" connectionString="Data Source=tcp:AXXXXXX03,1433;Initial Catalog=CXXUserDB;User ID=CXXUserID;Password=CXXUserPassword;Persist Security Info=False;" providerName="System.Data.SqlClient" /> </connectionStrings>
注意:如果你的项目是.NET Core/.NET 5+,
providerName要换成Microsoft.Data.SqlClient,对应安装的SQL Client包也要匹配。
2. 配置log4net的ADO.NET Appender
接下来在web.config里配置log4net的AdoNetAppender,这个组件负责把日志写入数据库。核心是通过connectionStringName引用上面定义的连接字符串,同时配置好日志写入的SQL语句和参数:
<log4net> <appender name="AzureSqlAppender" type="log4net.Appender.AdoNetAppender"> <!-- 引用之前定义的连接字符串 --> <connectionStringName value="AzureSqlLogConn" /> <!-- 指定数据库类型为SQL Server(Azure SQL兼容) --> <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" /> <!-- 配置日志参数,和SQL语句对应 --> <parameter> <parameterName value="@log_date" /> <dbType value="DateTime" /> <layout type="log4net.Layout.RawTimeStampLayout" /> </parameter> <parameter> <parameterName value="@thread" /> <dbType value="String" /> <size value="255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%thread" /> </layout> </parameter> <parameter> <parameterName value="@log_level" /> <dbType value="String" /> <size value="50" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%level" /> </layout> </parameter> <parameter> <parameterName value="@logger" /> <dbType value="String" /> <size value="255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%logger" /> </layout> </parameter> <parameter> <parameterName value="@message" /> <dbType value="String" /> <size value="4000" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%message" /> </layout> </parameter> <parameter> <parameterName value="@exception" /> <dbType value="String" /> <size value="2000" /> <layout type="log4net.Layout.ExceptionLayout" /> </parameter> </appender> <!-- 配置根日志器,启用上面的Appender --> <root> <level value="INFO" /> <!-- 日志级别,按需调整 --> <appender-ref ref="AzureSqlAppender" /> </root> </log4net>
3. 关键注意事项
- Azure SQL连接要求:你的连接字符串里已经加了
tcp:前缀和1433端口,这是必须的——Azure SQL只支持TCP连接,不能省略。 - 数据库表结构:要确保你的
CXXUserDB里有对应的Log表,结构要和INSERT语句匹配,比如可以用这个SQL创建:
CREATE TABLE Log ( Id INT IDENTITY(1,1) PRIMARY KEY, Date DATETIME NOT NULL, Thread NVARCHAR(255) NOT NULL, Level NVARCHAR(50) NOT NULL, Logger NVARCHAR(255) NOT NULL, Message NVARCHAR(4000) NOT NULL, Exception NVARCHAR(2000) NULL );
- 权限验证:确认你的
CXXUserID账号有对Log表的INSERT权限,不然日志会写入失败。 - 项目初始化:如果是.NET Core项目,要在
Program.cs里初始化log4net:
var logger = LogManager.GetLogger(typeof(Program)); logger.Info("应用启动成功");
4. 测试配置
配置完成后,可以写个简单的测试代码验证日志是否能正常写入:
private static readonly ILog _log = LogManager.GetLogger(typeof(YourServiceClass)); public void TestLogWriting() { _log.Info("这是一条测试Info日志"); try { throw new InvalidOperationException("测试异常"); } catch (Exception ex) { _log.Error("发生错误", ex); } }
执行后去Azure SQL的Log表查看,就能看到对应的日志条目了。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

