log4net 数据库存日志正确配置

网上一大堆log4net 配置,日志存入数据库,尤其豆包给的配置全是错的,垃圾

找deepseek终于正确了,前后豆包浪费了我一个小时

注意:<log4net>外层没有<configuration>

创建表Sql语句:

sql 复制代码
CREATE TABLE log (
    Id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
    LogTime DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '日志时间',
    Level VARCHAR(20) NOT NULL COMMENT '日志级别',
    Logger VARCHAR(255) COMMENT '日志类名',
    Message TEXT COMMENT '日志信息',
    Exception TEXT COMMENT '异常堆栈',
    Thread VARCHAR(50) COMMENT '线程号',
    IpAddress VARCHAR(100) COMMENT '客户端IP'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

正确配置:

XML 复制代码
<?xml version="1.0" encoding="utf-8"?>
<log4net debug="true">
	<!-- ========== 定义输出到 MySQL 的 Appender ========== -->
	<appender name="AdoNetAppender_MySql" type="log4net.Appender.ADONetAppender">
		<!-- 缓冲大小设为1,每写一条立即提交,便于调试(生产环境可按需调大) -->
		<bufferSize value="1" />
		<!-- 关闭事务,避免事务未提交导致数据丢失(测试时可开启,生产建议根据需求) -->
		<useTransactions value="false" />

		<!-- 1. MySQL 驱动:不指定具体版本,由 .NET 自动加载项目引用的 MySql.Data -->
		<connectionType value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data" />

		<!-- 2. 连接字符串(!!!请替换为你自己的 MySQL 连接信息 !!!) -->
		<connectionString value="server=127.0.0.1;user id=root;password=525625;database=testdb;port=3306;CharSet=utf8;Pooling=True;" />

		<!-- 3. SQL 插入语句(字段名用反引号包裹,防止与保留字冲突) -->
		<commandText value="
      INSERT INTO `log` (`LogTime`, `Level`, `Logger`, `Message`, `Exception`, `Thread`, `IpAddress`)
      VALUES (?log_time, ?log_level, ?logger, ?message, ?exception, ?thread, ?ip)
    " />

		<!-- ====== 参数定义(顺序必须与 SQL 中的字段顺序一致) ====== -->

		<!-- 日志时间 -->
		<parameter>
			<parameterName value="?log_time" />
			<dbType value="DateTime" />
			<layout type="log4net.Layout.RawTimeStampLayout" />
		</parameter>

		<!-- 日志级别 -->
		<parameter>
			<parameterName value="?log_level" />
			<dbType value="String" />
			<size value="20" />
			<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="4000" />
			<layout type="log4net.Layout.PatternLayout">
				<conversionPattern value="%exception" />
			</layout>
			<!-- 关键:如果日志没有异常,允许插入 NULL -->
			<allowNull value="true" />
		</parameter>

		<!-- 线程名称 -->
		<parameter>
			<parameterName value="?thread" />
			<dbType value="String" />
			<size value="50" />
			<layout type="log4net.Layout.PatternLayout">
				<conversionPattern value="%thread" />
			</layout>
		</parameter>

		<!-- IP 地址(从全局上下文中获取,需在代码中设置) -->
		<parameter>
			<parameterName value="?ip" />
			<dbType value="String" />
			<size value="50" />
			<layout type="log4net.Layout.PatternLayout">
				<conversionPattern value="%property{ip}" />
			</layout>
			<!-- 如果未设置 ip 属性,允许插入 NULL(或空字符串,取决于表定义) -->
			<allowNull value="true" />
		</parameter>
	</appender>

	<!-- ========== 根日志器:所有日志都使用上面的 Appender ========== -->
	<root>
		<level value="ALL" />
		<appender-ref ref="AdoNetAppender_MySql" />
	</root>
</log4net>
相关推荐
刀客Doc3 分钟前
即时零售不只是多一个渠道,品牌开始重做终端生意
大数据·数据库
就叫飞六吧26 分钟前
防抖、幂等、唯一约束三件套 ;
数据库
神奇霸王龙44 分钟前
Agent 准入门控屠夫:5 旗舰 4 维度评估
linux·运维·数据库·ai·ai作画·agent·ai编程
鲸采云SRM采购管理系统1 小时前
采购管理系统哪家好?2026最新测评对比
java·服务器·数据库
cfm_29141 小时前
基于Binlog实现不停机数据库平滑迁移技术
运维·数据库·架构
Full Stack Developme1 小时前
SQL 注入 的历史及设计工作原理
数据库·sql
Tisfy1 小时前
Codex:通过编辑配置文件添加带Bearer的自定义MCP
数据库·大模型·agent·codex·mcp
哈__1 小时前
面向AI智能体的数据库专业技能包:将DBA工程经验封装为可调用能力
数据库·人工智能·dba
阿坤带你走近大数据2 小时前
SQL里where后面的1=1是干嘛的,走的是什么索引
数据库·sql
阿坤带你走近大数据2 小时前
SQL的执行顺序和书写顺序的介绍
数据库·sql·oracle