RuoVea.ExLog
8.0.0.3
See the version list below for details.
dotnet add package RuoVea.ExLog --version 8.0.0.3
NuGet\Install-Package RuoVea.ExLog -Version 8.0.0.3
<PackageReference Include="RuoVea.ExLog" Version="8.0.0.3" />
<PackageVersion Include="RuoVea.ExLog" Version="8.0.0.3" />
<PackageReference Include="RuoVea.ExLog" />
paket add RuoVea.ExLog --version 8.0.0.3
#r "nuget: RuoVea.ExLog, 8.0.0.3"
#:package RuoVea.ExLog@8.0.0.3
#addin nuget:?package=RuoVea.ExLog&version=8.0.0.3
#tool nuget:?package=RuoVea.ExLog&version=8.0.0.3
📋 RuoVea.ExLog
零配置、即抛即忘的 .NET 日志组件 — 基于 log4net 3.3.1 封装,提供纯静态 API,自动按日期/级别分文件写入日志。无 DI 依赖、无中间件配置,真正意义上的开箱即写。
📖 目录
📋 概览
RuoVea.ExLog 为 .NET 8.0 / 10.0 应用程序提供开箱即用的日志记录能力,封装了 log4net 的配置与调用细节。所有日志写入均为即抛即忘(fire-and-forget)模式,主线程不会被 IO 阻塞。
┌───────────────────────────────────────────────────────┐
│ RuoVea.ExLog │
├───────────────────────────────────────────────────────┤
│ LogFactory (静态入口) │
│ ├─ Info(string) ──▶ log/yyyy-MM-dd/Info.log │
│ ├─ Debug(string) ──▶ log/yyyy-MM-dd/Debug.log │
│ ├─ Warn(string) ──▶ log/yyyy-MM-dd/Warn.log │
│ ├─ Error(string) ──▶ log/yyyy-MM-dd/Error.log │
│ ├─ Error(Exception) ──▶ log/yyyy-MM-dd/Error.log │
│ ├─ Error(string, Exception) │
│ └─ Error(LogMessage) │
│ │
│ Log LogFormat LogMessage │
│ ├─ Debug(object) ├─ ErrorFormat ├─ OperationTime│
│ ├─ Info(object) ├─ WarnFormat ├─ Url │
│ ├─ Warn(object) ├─ InfoFormat ├─ Class │
│ └─ Error(object) ├─ DebugFormat ├─ Ip │
│ └─ ExceptionFormat ├─ Host │
│ ├─ Browser │
│ LogLevel (枚举定义, 代码中未使用) ├─ UserName │
│ Error / Warning / Info / Debug ├─ Content │
│ ├─ ExceptionInfo
│ ├─ ExceptionSource
│ └─ ExceptionRemark
├───────────────────────────────────────────────────────┤
│ 底层: log4net 3.3.1 | 仓储: NETCoreRepository │
│ 策略: Composite Rolling | 10MB | 无限备份 | MinimalLock│
└───────────────────────────────────────────────────────┘
设计原则
| 原则 | 说明 |
|---|---|
| 零配置启动 | 自动检测并创建 log4net.config,无需手动配置 |
| 纯静态 API | 所有方法均为 static,无 DI 注册、无中间件、无生命周期管理 |
| 即抛即忘 | 日志写入通过 Task.Run 委托给线程池,不阻塞调用方 |
| 按级分流 | ERROR / WARN / INFO / DEBUG 四条独立 RollingFileAppender,按日期分目录 |
| 自动容错 | 配置文件缺失时自动生成,组件初始化不依赖外部配置 |
文件组织
{当前目录}/
├── log4net.config ← 首次使用时自动生成(若缺失)
└── log/
├── 2026-06-23/
│ ├── Error.log
│ ├── Warn.log
│ ├── Info.log
│ └── Debug.log
├── 2026-06-22/
│ ├── Error.log
│ └── ...
└── ...
支持的 Target Framework
| TFM | 最低版本 |
|---|---|
net8.0 |
8.0.0.2 |
net10.0 |
10.0.0.1 |
📦 安装
.NET CLI
# .NET 8.0
dotnet add package RuoVea.ExLog --version 8.0.0.2
# .NET 10.0
dotnet add package RuoVea.ExLog --version 10.0.0.1
Package Manager
Install-Package RuoVea.ExLog -Version 8.0.0.2
PackageReference
<PackageReference Include="RuoVea.ExLog" Version="8.0.0.2" />
⚡ 30 秒快速开始
1. 导入命名空间
using RuoVea.ExLog;
2. 第一行日志
// <inheritdoc cref="LogFactory.Info"/>
// 无需任何配置,直接写入 Info 级别日志
LogFactory.Info("用户登录成功");
// <inheritdoc cref="LogFactory.Error(Exception)"/>
try
{
int result = 10 / int.Parse("0");
}
catch (Exception ex)
{
LogFactory.Error(ex); // 自动格式化异常信息并写入 Error.log
}
3. 日志文件自动就位
首次调用任一 LogFactory 方法时,如果当前目录不存在 log4net.config,组件会自动创建。日志随即写入 log/yyyy-MM-dd/ 目录下对应的文件。
30 秒内你完成了: 安装 NuGet 包 → 引用命名空间 → 写入 Info / Error 日志 → 在
log/{日期}/下查看日志文件。全程零配置。
🧩 核心场景
场景一:常见日志记录
┌──────────────┐ Task.Run ┌─────────────┐ log4net ┌──────────────────────┐
│ LogFactory │ ────────────▶ │ 线程池线程 │ ───────────▶ │ log/yyyy-MM-dd/ │
│ .Info(string) │ 即抛即忘 │ TextInfo() │ RollingFile │ Info.log │
└──────────────┘ └─────────────┘ └──────────────────────┘
// <inheritdoc cref="LogFactory.Info"/>
LogFactory.Info("订单创建成功,订单号: ORD-20260623-001");
// <inheritdoc cref="LogFactory.Debug"/>
LogFactory.Debug($"请求参数校验通过: userId={userId}, amount={amount}");
// <inheritdoc cref="LogFactory.Warn"/>
LogFactory.Warn($"库存预警: SKU={sku}, 剩余库存={remaining}, 阈值={threshold}");
场景二:异常记录与追踪
┌──────────────┐
│ try-catch │
│ Exception │
└──────┬───────┘
│
├──▶ LogFactory.Error(Exception ex)
│ → 提取 ex.Message / ex.Source / ex.StackTrace
│ → 格式化后写入 Error.log
│
├──▶ LogFactory.Error(string title, Exception ex)
│ → title 前置到异常信息: "{title} : {ex.Message}"
│ → 其余同上
│
└──▶ LogFactory.Error(LogMessage logMessage)
→ 使用 LogFormat.ExceptionFormat() 完整格式化
→ 写入 Error.log
// <inheritdoc cref="LogFactory.Error(Exception)"/>
try
{
var user = await GetUserFromDbAsync(userId);
}
catch (Exception ex)
{
LogFactory.Error(ex);
// Error.log 输出:
// 1. 调试: >> 操作时间: 2026/6/23 14:30:00 操作人:
// 2. 地址:
// 3. 类名: RuoVea.ExLog.LogFactory
// 4. 主机: Ip : 浏览器:
// 5. 异常: Attempted to divide by zero.
// 6. 来源: RuoVea.ExLog
// 7. 实例: at RuoVea.ExLog.LogFactory.TextError(Exception error, String title)...
// ---------------------------------------------------------------
}
// <inheritdoc cref="LogFactory.Error(string, Exception)"/>
try
{
await ProcessPaymentAsync(order);
}
catch (Exception ex)
{
LogFactory.Error("支付处理失败", ex);
// ExceptionInfo = "支付处理失败 : {ex.Message}"
}
场景三:结构化日志(LogMessage)
┌───────────────┐
│ LogMessage │
│ (POCO) │
│ │
│ OperationTime │──┐
│ Url │ │
│ Class │ │ LogFormat.ErrorFormat(logMessage)
│ Ip │ ├──▶ LogFormat.WarnFormat(logMessage)
│ Host │ │ LogFormat.InfoFormat(logMessage)
│ Browser │ │ LogFormat.DebugFormat(logMessage)
│ UserName │ │ LogFormat.ExceptionFormat(logMessage)
│ Content │ │
│ ExceptionInfo │ │ ┌─────────────────────────────┐
│ ExceptionSrc │ └───────▶│ 格式化字符串 → Error.log │
│ ExceptionRmk │ └─────────────────────────────┘
└───────────────┘
// <inheritdoc cref="LogMessage"/>
// 构造完整异常上下文并记录
var logMsg = new LogMessage
{
OperationTime = DateTime.Now,
Url = "/api/orders/create",
Class = "OrderService.CreateOrder",
Ip = "192.168.1.100",
Host = "order-api-01",
Browser = "Chrome/126.0",
UserName = "zhangsan",
Content = "创建订单 ORD-20260623-001",
ExceptionInfo = "数据库连接超时",
ExceptionSource = "OrderDbConnection",
ExceptionRemark = "连接字符串: Server=db-01;Database=Orders; 超时: 30s → 实际 45s"
};
// <inheritdoc cref="LogFactory.Error(LogMessage)"/>
LogFactory.Error(logMsg);
// 内部调用 LogFormat.ExceptionFormat() 格式化后写入 Error.log
❗ 性能陷阱:
LogMessage各字段不会自动填充。使用前必须手动设置OperationTime、Url、Class等字段。LogFactory.Error(Exception)重载会自动提取异常信息,但LogFactory.Error(LogMessage)完全依赖调用方填充。
场景四:自定义日志对象(GetLogger)
// <inheritdoc cref="LogFactory.GetLogger(Type)"/>
// 按类型获取日志操作对象
public class PaymentService
{
private readonly Log _log = LogFactory.GetLogger(typeof(PaymentService));
public void Process(decimal amount)
{
_log.Info($"处理付款: {amount:C}");
_log.Debug($"付款明细: ...");
}
}
// <inheritdoc cref="LogFactory.GetLogger(string)"/>
// 按字符串名称获取日志操作对象
var orderLog = LogFactory.GetLogger("OrderModule");
orderLog.Warn("订单模块: 检测到重复提交");
orderLog.Error("订单模块: 回调验签失败");
通过
GetLogger获取的Log对象仍然是 log4netILog的轻量包装,不持有线程池调度逻辑(即同步写入 log4net,而非Task.Run调度)。如果追求异步写入,请使用LogFactory的静态方法。
场景五:日志格式化(LogFormat)
// <inheritdoc cref="LogFormat.ErrorFormat"/>
var logMsg = new LogMessage
{
OperationTime = DateTime.Now,
Class = "CheckoutService",
UserName = "lisi",
Content = "购物车结算失败"
};
string formatted = new LogFormat().ErrorFormat(logMsg);
// 输出:
// 1. 错误: >> 操作时间: 2026/6/23 14:30:00 操作人: lisi
// 2. 地址:
// 3. 类名: CheckoutService
// 4. Ip : 主机: 浏览器:
// 5. 内容: 购物车结算失败
// ---------------------------------------------------------------
// <inheritdoc cref="LogFormat.ExceptionFormat"/>
// ExceptionFormat 相较于 ErrorFormat 额外输出 ExceptionInfo/Source/Remark
string exFormatted = new LogFormat().ExceptionFormat(logMsg);
// ...
// 5. 异常: ...
// 6. 来源: ...
// 7. 实例: ...
// ---------------------------------------------------------------
五种格式化方法:
ErrorFormat/WarnFormat/InfoFormat/DebugFormat/ExceptionFormat。前四种输出字段相同(仅标题文字不同),ExceptionFormat额外输出异常来源与堆栈(第 5/6/7 行)。
⚙️ 配置选项详解
log4net.config 自动生成配置
组件在静态构造函数中自动加载 log4net.config。若文件不存在,调用 LogFactory.CreaterConfig() 或任一写入方法时自动生成,内容如下:
| 配置项 | 值 | 说明 |
|---|---|---|
<root> / <level> |
ERROR, WARN, INFO, DEBUG(四个级别同时启用) | 四个 Appender 独立过滤 |
repository |
NETCoreRepository |
专用 log4net 仓储,与默认仓储隔离 |
rollingStyle |
Composite |
同时按日期和文件大小滚动 |
maximumFileSize |
10MB |
单文件达到 10MB 后自动切割 |
maxSizeRollBackups |
-1 |
不限制历史文件数量 |
lockingModel |
MinimalLock |
最小化文件锁,写完后立即释放 |
staticLogFileName |
false |
文件名包含日期模式,非静态 |
appendToFile |
true |
追加模式,不覆盖已有日志 |
四个 Appender 差异对比
| Appender | 级别过滤 | 日志文件 | 格式 Pattern |
|---|---|---|---|
ErrorLog |
ERROR only | log/yyyy-MM-dd/Error.log |
%message(纯消息体) |
WarnLog |
WARN only | log/yyyy-MM-dd/Warn.log |
日期时间:%date - %message%newline |
InfoLog |
INFO only | log/yyyy-MM-dd/Info.log |
日期时间:%date - %message%newline |
DebugLog |
DEBUG only | log/yyyy-MM-dd/Debug.log |
%message(纯消息体) |
注意: Error.log 和 Debug.log 使用纯
%message格式(无时间戳前缀),Warn.log 和 Info.log 使用带%date的格式。这是代码自动生成的行为,与旧版 README 中展示的示例不同。
自定义 log4net.config
如需自定义配置(如改为 JSON 输出、增加 SQL Server Appender),只需在项目根目录放置自定义的 log4net.config 并将 CopyToOutputDirectory 设为 PreserveNewest。组件检测到文件已存在时不会覆盖。
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
<root>
<level value="ALL"/>
<appender-ref ref="ConsoleAppender"/>
<appender-ref ref="ErrorLog"/>
</root>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level - %message%newline"/>
</layout>
</appender>
</log4net>
🛡️ 错误处理与日志
组件自身的异常行为
| 场景 | 行为 | 影响 |
|---|---|---|
log4net.config 缺失 |
自动创建并写入配置 | 首次调用有轻微 IO 延迟 |
| log4net 内部写入失败 | 异常被 log4net 内部吞掉(取决于 Appender 配置) | 静默丢失日志 |
Task.Run 调度失败 |
Task.Run 抛出,传播给调用方 |
极罕见(线程池耗尽时) |
TextWarn 中 log4net 异常 |
✅ 已修复 — 捕获后降级输出到 Debug.WriteLine,不再静默丢失 |
开发调试时可通过 Visual Studio 输出窗口观察 |
TextError 中 log4net 异常 |
未被捕获,传播到线程池线程 → 触发 TaskScheduler.UnobservedTaskException |
日志丢失,且可能触发进程级异常事件 |
CreaterConfig 文件创建 |
✅ 已修复 — 使用 File.WriteAllText 原子写入,避免句柄泄漏 |
线程安全 |
进程退出前刷新日志
RuoVea.ExLog 提供 Flush / FlushAsync 方法等待所有待处理日志写入完成,推荐在应用退出前调用:
// 同步刷新(超时 5 秒)
LogFactory.Flush(timeoutMs: 5000);
// 异步刷新(适用于 ASP.NET Core 生命周期)
await LogFactory.FlushAsync(timeoutMs: 5000);
❗ 性能陷阱: 短生命周期应用(CLI 工具、Lambda 函数)退出前务必调用
Flush,否则Task.Run尚未执行完成的日志将永久丢失。
🧵 线程安全
整体评估
| 组件 | 线程安全 | 说明 |
|---|---|---|
LogFactory(静态方法) |
⚠️ 无顺序保证 | 通过 EnqueueLogTask 调度到线程池,同一毫秒内多条日志的写入顺序不可预测。调用 Flush 可等待完成 |
LogFactory.CreaterConfig() |
✅ 是 | 使用 File.WriteAllText 原子写入,幂等安全 |
LogFactory.Flush / FlushAsync |
✅ 是 | 收集并等待所有待处理任务,线程安全(内部加锁) |
LogFactory.GetLogger() |
✅ 是 | 每次调用创建新 Log 实例,无共享状态 |
Log 实例 |
⚠️ 取决于 ILog 实现 | 包装的 log4net.ILog 本身是线程安全的,但多个 Log 实例同时写入时受 Appender 线程安全策略影响 |
LogFormat |
✅ 是 | 纯无状态方法,每次调用创建新 StringBuilder |
LogMessage |
⚠️ 否 | POCO 对象,多线程共享时需调用方自行同步 |
LogLevel |
✅ 是 | 不可变枚举值 |
LogFactory 线程详析
// 所有公开静态方法均采用此模式:
public static void Info(string error)
{
System.Threading.Tasks.Task.Run(() => { TextInfo(error); });
}
// ↳ 调用方立即返回,实际写入发生在未来的某个线程池线程上
⚠️ 重要: 日志写入是异步的。短生命周期应用退出前请调用
LogFactory.Flush()/FlushAsync(),避免未完成的日志丢失。
⚠️ 使用注意:
Error(string title, Exception error)在Task.Run调度前从Exception.TargetSite捕获调用类名和方法名,因此日志中能正确反映原始调用方的类型和方法。
CreaterConfig已改用File.WriteAllText原子写入,消除竞态条件。建议在应用启动时(Main或Program.cs最顶部)单线程调用一次:
// <inheritdoc cref="LogFactory.CreaterConfig"/>
// Program.cs 入口处单线程调用
LogFactory.CreaterConfig(); // 确保配置存在且完整
已修复: 代码中不再追加
"\r\n",改为 log4net Layout 统一通过%newline控制换行,消除双重换行问题。
📊 API 完整速查
LogFactory 静态类
| 方法 | 签名 | 调度方式 | 说明 |
|---|---|---|---|
CreaterConfig |
static void CreaterConfig() |
同步(直接执行) | 检查并创建 log4net.config |
GetLogger |
static Log GetLogger(Type type) |
同步(直接执行) | 按类型创建日志包装器 |
GetLogger |
static Log GetLogger(string str) |
同步(直接执行) | 按名称创建日志包装器,使用 NETCoreRepository 仓储 |
Info |
static void Info(string error) |
Task.Run → 线程池 |
写入 Info 级别日志,追加 \r\n |
Debug |
static void Debug(string error) |
Task.Run → 线程池 |
写入 Debug 级别日志,追加 \r\n |
Warn |
static void Warn(string error) |
Task.Run → 线程池 |
写入 Warn 级别日志,异常被静默吞掉 |
Error |
static void Error(string error) |
Task.Run → 线程池 |
写入 Error 级别日志,追加 \r\n |
Error |
static void Error(Exception error) |
Task.Run → 线程池 |
提取 InnerException.Message(或 ex.Message),填充 LogMessage,按 ExceptionFormat 输出 |
Error |
static void Error(string title, Exception error) |
Task.Run → 线程池 |
title 前置到异常信息:"{title} : {ex.Message}" |
Error |
static void Error(LogMessage logMessage) |
Task.Run → 线程池 |
使用 LogFormat.ExceptionFormat 完整格式化后输出 |
Log 类(ILog 包装器)
| 方法 | 签名 | 说明 |
|---|---|---|
Debug |
void Debug(object message) |
同步调用 ilog.Debug(message) |
Info |
void Info(object message) |
同步调用 ilog.Info(message) |
Warn |
void Warn(object message) |
同步调用 ilog.Warn(message) |
Error |
void Error(object message) |
同步调用 ilog.Error(message) |
Log的方法为同步阻塞调用。如需异步写入,请使用LogFactory的静态方法。
LogMessage 类
| 属性 | 类型 | 说明 |
|---|---|---|
OperationTime |
DateTime |
操作时间(需手动赋值) |
Url |
string |
请求 URL 地址 |
Class |
string |
类名 / 模块名 |
Ip |
string |
客户端 IP 地址 |
Host |
string |
主机名 |
Browser |
string |
浏览器信息(User-Agent) |
UserName |
string |
操作用户名 |
Content |
string |
日志内容正文 |
ExceptionInfo |
string |
异常信息 |
ExceptionSource |
string |
异常来源(Exception.Source) |
ExceptionRemark |
string |
异常备注(Exception.StackTrace) |
LogFormat 类
| 方法 | 输入 | 输出 | 说明 |
|---|---|---|---|
ErrorFormat(LogMessage) |
LogMessage |
string |
输出 5 行结构化错误信息 |
WarnFormat(LogMessage) |
LogMessage |
string |
输出 5 行结构化警告信息 |
InfoFormat(LogMessage) |
LogMessage |
string |
输出 5 行结构化信息 |
DebugFormat(LogMessage) |
LogMessage |
string |
输出 5 行结构化调试信息 |
ExceptionFormat(LogMessage) |
LogMessage |
string |
输出 7 行,额外含异常来源与堆栈 |
LogLevel 枚举
| 成员 | 数值 | [Description] |
说明 |
|---|---|---|---|
Error |
0 |
"错误" |
代码中未被任何方法使用 |
Warning |
1 |
"警告" |
代码中未被任何方法使用 |
Info |
2 |
"信息" |
代码中未被任何方法使用 |
Debug |
3 |
"调试" |
代码中未被任何方法使用 |
LogLevel枚举在当前版本中未被任何代码引用,仅为 API 预留定义。实际日志级别由调用方选择LogFactory的方法名决定。
🗺️ 版本迁移指南
从旧版 README 示例代码迁移
旧版 README 中展示的方法实际不存在,迁移方式如下:
| 旧 README 展示(不存在) | 实际可用 API |
|---|---|
LogFormat.FormatBusinessLog(module, operation, data) |
new LogFormat().InfoFormat(logMessage) 或直接使用 LogFactory.Info(string) |
LogFormat.FormatPerformanceLog(operation, elapsedMs, info) |
自行拼接字符串后调用 LogFactory.Info(string) 或 LogFactory.Warn(string) |
LogFormat.FormatErrorLog(context, exception, requestData) |
LogFactory.Error(title, exception) — 第二个参数为纯字符串 title,非 JSON |
LogFactory.Error($"...", exception) 传入 JSON 字符串 |
不支持。Error(string, Exception) 的 string 参数仅为标题前缀 |
| .NET Framework 支持 | 不支持。仅支持 net8.0 和 net10.0 |
从手动 log4net 迁移
| 旧代码模式 | 迁移到 RuoVea.ExLog |
|---|---|
new XmlConfigurator().Configure() 手动加载配置 |
自动加载 log4net.config,无需手动调用 |
LogManager.GetLogger(typeof(T)) 获取 ILog |
LogFactory.GetLogger(typeof(T)) 获取 Log 包装器 |
ilog.Info(msg) 同步写入 |
LogFactory.Info(msg) 异步写入,或继续使用 Log.Info(msg) 同步写入 |
| 手动管理 Appender / Filter / Layout | 自动生成完整配置,四个 Appender 已就绪 |
v8.0.0.x → v10.0.0.x
- API 无变化。v10.0.0.1 仅在
net10.0TFM 上编译,所有公开 API 签名保持一致。 - 底层 log4net 依赖版本不变(
3.3.1)。 - 自动生成的
log4net.config内容不变。
📄 License
MIT License © RuoVea
🔗 相关资源: NuGet Gallery · 问题反馈
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- log4net (>= 3.3.1)
NuGet packages (3)
Showing the top 3 NuGet packages that depend on RuoVea.ExLog:
| Package | Downloads |
|---|---|
|
RuoVea.ExFilter
注入 进行全局的异常日志收集、执行操作日志、参数验证,支持简体中文、繁体中文、粤语、日语、法语、英语.services.ExceptionSetup();// 注入 全局错误日志处 services.ExceptionSetup(ExceptionLog actionOptions);// 注入 全局错误日志处 services.ExceptionSetup(builder.Configuration.GetSection("AopOption:ExceptionLog"));// 注入 全局错误日志处 services.RequestActionSetup();// 注入 请求日志拦截 [执行操作日志、参数验证 ] services.RequestActionSetup(RequestLog actionOptions);// 注入 请求日志拦截 [执行操作日志、参数验证 ] services.RequestActionSetup(builder.Configuration.GetSection("AopOption:RequestLog"));// 注入 请求日志拦截 [执行操作日志、参数验证 ] services.ResourceSetup();//对资源型信息进行过滤 services.ResultSetup();//对结果进行统一 services.ApISafeSetup(AppSign actionOptions);//接口安全校验 services.ApISafeSetup(builder.Configuration.GetSection("AopOption:AppSign"));//接口安全校验 services.ApISignSetup(AppSign actionOptions);//签名验证 ( appKey + signKey + timeStamp + data ); services.ApISignSetup(builder.Configuration.GetSection("AopOption:AppSign"));//签名验证 ( appKey + signKey + timeStamp + data ); services.AddValidateSetup();//模型校验 services.AddUiFilesZipSetup();//将前端UI压缩文件进行解压 不进行接口安全校验 -> NonAplSafeAttribute 不签名验证 -> NonAplSignAttribute 不进行全局的异常日志收集 -> NonExceptionAttribute 不对资源型信息进行过滤 -> NonResourceAttribute 不对结果进行统一 -> NonRestfulResultAttribute |
|
|
RuoVea.ExGlobal
web 注入 全局错误日志、操作日志记录 |
|
|
RuoVea.OmiApi.Upload
文件上传模块 |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 10.0.0.2 | 144 | 6/24/2026 |
| 10.0.0.1 | 374 | 5/28/2026 |
| 10.0.0 | 518 | 1/12/2026 |
| 9.0.0 | 1,426 | 7/25/2025 |
| 8.0.0.3 | 253 | 6/24/2026 |
| 8.0.0.2 | 660 | 5/28/2026 |
| 8.0.0.1 | 7,886 | 7/23/2024 |
| 8.0.0 | 353 | 11/24/2023 |
| 7.0.0.1 | 524 | 5/28/2026 |
| 7.0.0 | 9,334 | 7/23/2024 |
| 6.0.1.2 | 602 | 5/28/2026 |
| 6.0.1.1 | 17,313 | 7/23/2024 |
| 6.0.1 | 3,720 | 6/8/2022 |
| 5.0.6.1 | 128 | 5/28/2026 |
| 5.0.6 | 1,017 | 6/8/2022 |
| 2.1.1.2 | 223 | 7/23/2024 |
| 2.1.1.1 | 261 | 11/24/2023 |
| 2.1.1 | 688 | 6/9/2022 |
| 2.1.0 | 657 | 6/8/2022 |
| 2.0.0 | 255 | 9/22/2024 |