XAMPP(含MariaDB)环境下NLog日志写入数据库失败求助
这个配置是完全可以实现的,我和不少开发者都成功用NLog把日志写入XAMPP自带的MariaDB里。你目前的问题大概率是配置遗漏或细节没到位,以下是具体的排查和修正点:
补全数据库目标的完整配置
你给出的<target>配置缺少核心的SQL写入逻辑,NLog不知道要把日志数据插入到哪个表的哪些字段中。需要补充<commandText>和参数映射,示例配置如下:<target name="database" xsi:type="Database" dbProvider="MySql.Data.MySqlClient.MySqlConnection, MySql.Data" connectionString="server=127.0.0.1;Database=test;userid=root;password=*****"> <commandText> INSERT INTO logs (LogLevel, Message, CreatedTime, LoggerName) VALUES (@level, @message, @date, @logger) </commandText> <parameter name="@level" layout="${level}" /> <parameter name="@message" layout="${message}" /> <parameter name="@date" layout="${date:format=yyyy-MM-dd HH:mm:ss}" /> <parameter name="@logger" layout="${logger}" /> </target>同时要确保
test数据库中已创建对应的logs表,表结构需和SQL语句匹配,示例建表语句:CREATE TABLE logs ( Id INT AUTO_INCREMENT PRIMARY KEY, LogLevel VARCHAR(50) NOT NULL, Message TEXT NOT NULL, CreatedTime DATETIME NOT NULL, LoggerName VARCHAR(255) NOT NULL );验证驱动兼容性
旧版MySql.Data驱动和XAMPP中的MariaDB可能存在兼容性问题,建议改用MySqlConnector驱动(通过NuGet安装),对应的dbProvider改为MySqlConnector.MySqlConnection, MySqlConnector,这个驱动对MariaDB的支持更友好。开启NLog内部日志定位问题
既然没有错误提示,开启NLog内部日志可以帮你找到底层问题。在NLog配置的<nlog>节点中添加:<nlog internalLogFile="nlog-internal.log" internalLogLevel="Debug"> <!-- 你的目标和规则配置 --> </nlog>运行程序后查看生成的
nlog-internal.log,里面会详细记录数据库连接、SQL执行的错误信息,比如表不存在、字段不匹配、权限不足等。确认日志记录器调用匹配
确保代码中使用的日志记录器名称是app_logger,示例代码:private static readonly Logger Logger = LogManager.GetLogger("app_logger"); Logger.Info("测试数据库日志写入");如果记录器名称和规则中的
name不匹配,NLog不会触发数据库写入操作。检查数据库连接权限与地址
XAMPP中的MariaDB可能对localhost和127.0.0.1的权限设置有差异,可以尝试把连接字符串中的server改为localhost;同时确认root用户拥有对test数据库的插入权限。
内容的提问来源于stack exchange,提问作者DonCorleone

