RuoVea.ExLog 10.0.0.2

dotnet add package RuoVea.ExLog --version 10.0.0.2
                    
NuGet\Install-Package RuoVea.ExLog -Version 10.0.0.2
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="RuoVea.ExLog" Version="10.0.0.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="RuoVea.ExLog" Version="10.0.0.2" />
                    
Directory.Packages.props
<PackageReference Include="RuoVea.ExLog" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add RuoVea.ExLog --version 10.0.0.2
                    
#r "nuget: RuoVea.ExLog, 10.0.0.2"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package RuoVea.ExLog@10.0.0.2
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=RuoVea.ExLog&version=10.0.0.2
                    
Install as a Cake Addin
#tool nuget:?package=RuoVea.ExLog&version=10.0.0.2
                    
Install as a Cake Tool

📋 RuoVea.ExLog

NuGet NuGet Downloads Target Framework License

零配置、即抛即忘的 .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 各字段不会自动填充。使用前必须手动设置 OperationTimeUrlClass 等字段。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 对象仍然是 log4net ILog 的轻量包装,不持有线程池调度逻辑(即同步写入 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 原子写入,消除竞态条件。建议在应用启动时(MainProgram.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.0net10.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.0 TFM 上编译,所有公开 API 签名保持一致。
  • 底层 log4net 依赖版本不变(3.3.1)。
  • 自动生成的 log4net.config 内容不变。

📄 License

MIT License © RuoVea


🔗 相关资源: NuGet Gallery · 问题反馈

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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
Loading failed