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>
相关推荐
这个DBA有点耶3 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
DBA_G3 天前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库
自由能燃气设备3 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远3 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
2601_962218613 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法
张洛闻Eren3 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
于平安3 天前
MySQL-触发器
数据库·mysql
白远山3 天前
上海24小时自助健身房解决方案实战指南与经验分享
java·数据库·架构·需求分析
Omics Pro3 天前
斯坦福Nature+Science|广义虚拟细胞基础大模型
数据库·人工智能·算法·机器学习·自然语言处理
2603_965148113 天前
AI+API选品:下一代智能商务助手雏形已现
java·大数据·数据库·人工智能·数据挖掘