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>
相关推荐
liuxiaowei32 小时前
【绝版教程】新版MySQL DBA高级实战进阶班 MySQL8.0 姜承尧-腾讯数据库总监
数据库·mysql·dba
破碎的南瓜2 小时前
sqli--sql注入过关笔记(1,2,3,4,5,9)
数据库·笔记·sql
吠品3 小时前
Zabbix Web界面误报Server未运行的排查与解决
java·服务器·数据库
SelectDB4 小时前
Apache Doris Variant 动态 JSON 实战教程:从建表到跑通 100M Agent 日志查询
数据库
sg_knight4 小时前
MySQL 存储过程详解:从入门到实战
android·数据库·mysql·database·dba·关系型数据库·db
星空露珠5 小时前
28种颜色对应名称,
开发语言·数据库·算法·游戏·lua
踏月的造梦星球6 小时前
DM8 DSC 单机双实例部署
运维·开发语言·数据库
Database_Cool_6 小时前
企业级多模态分析计算引擎选型:首选 AnalyticDB MySQL 向量 + SQL + 实时一体化方案
数据库·sql·mysql
SelectDB6 小时前
从 Oracle、Hadoop 到 Apache Doris:哥瑞利泛半导体智能制造数据平台实践
数据库