[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"seo":3,"site":24,"contact":28,"portfolio:OzaLog":36},{"titleTemplate":4,"description":5,"keywords":6,"organizationName":7,"personName":7,"personJobTitle":8,"bingVerification":9,"customMeta":10,"googleVerification":15,"headInjections":16},"%s | 全端系統開發 | 網頁設計 | 伺服器託管","全端系統開發、網頁設計、伺服器託管一站式服務 — 韓滷 ozakboy","全端開發,網頁設計,伺服器託管,韓滷,ozakboy,C#,Vue,Nuxt,微服務","韓滷","全端系統工程師","4928B4223346F74DB53D9754C37164AB",[11],{"kind":12,"key":13,"content":14},"name","google-adsense-account","ca-pub-5488118663607574","npSud3_qj3nhajB0DeUEYYZbdflOR4vLDaLWnXD2liU",[17,21],{"label":18,"content":19,"enabled":20},"GA Google tag","\u003C!-- Google tag (gtag.js) -->\n\u003Cscript async src=\"https:\u002F\u002Fwww.googletagmanager.com\u002Fgtag\u002Fjs?id=G-L0QNGPN253\">\u003C\u002Fscript>\n\u003Cscript>\n  window.dataLayer = window.dataLayer || [];\n  function gtag(){dataLayer.push(arguments);}\n  gtag('js', new Date());\n\n  gtag('config', 'G-L0QNGPN253');\n\u003C\u002Fscript>",true,{"label":22,"content":23,"enabled":20},"Google Syndication","\u003Cscript async src=\"https:\u002F\u002Fpagead2.googlesyndication.com\u002Fpagead\u002Fjs\u002Fadsbygoogle.js?client=ca-pub-5488118663607574\"\n     crossorigin=\"anonymous\">\u003C\u002Fscript>",{"siteTitle":7,"subtitle":25,"copyright":26,"favicon":27},"全端系統開發 \u002F 網頁設計 \u002F 伺服器託管","© 2026 韓滷 ozakboy. All rights reserved.","\u002Fdata\u002Fimages\u002Fsite\u002F33752408-36e1e0da1af5.ico",{"name":7,"title":8,"tagline":25,"email":29,"telegram":30,"line":31,"github":32,"intro":33,"website":34,"threads":35},"ozakboy@ozakboy.life","https:\u002F\u002Ftelegram.me\u002Fminksaki64","https:\u002F\u002Fline.me\u002Fti\u002Fp\u002FllWJZ4iuiJ","https:\u002F\u002Fgithub.com\u002Fozakboy","## 關於我\n\n我是韓滷,全端系統工程師。\n\n具備紮實的軟體開發基礎,擅長專案開發規劃、流程設計、各種 Bot 開發、網頁前後端開發、高頻交易系統、微服務架構等。主要開發語言為 C# .NET,擁有豐富的系統架構設計與實作經驗。\n\n## 聯絡方式\n\n歡迎透過 Email 或 Telegram 聯繫,討論您的專案需求。","https:\u002F\u002Fwww.ozakboy.life","https:\u002F\u002Fwww.threads.com\u002F@ozakboy",{"title":37,"description":38,"category":39,"status":40,"date":41,"gallery":42,"duration":46,"teamSize":47,"github":48,"demo":49,"technologies":50,"features":71,"updatedAt":73,"slug":74,"body":75},".NET 本地日誌函式庫","輕量、極簡 API、HFT 級異步——專為 .NET 應用設計的本地檔案日誌函式庫。\n\n","NuGet 套件","production","2026-05-09",[43],{"path":44,"alt":45},"\u002Fdata\u002Fimages\u002Fportfolio\u002F33752408-e54f80d16591.ico","","1","個人","https:\u002F\u002Fgithub.com\u002Fozakboy\u002FOzaLog","https:\u002F\u002Fozalog.ozakboy.life\u002F",[51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70],"ozalog","logging","logger","log","dotnet","csharp","nuget","async-logging","file-logging","local-logging","high-performance","hft","zero-dependency","thread-safe","multi-threaded","exception-handling","log-rotation","dotnet-core","dotnet-standard","performance-logging",[72],"極簡 API HFT 級異步 零依賴 線程安全","2026-07-05","OzaLog","# OzaLog\n\n[![nuget](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fnuget-OzaLog-blue)](https:\u002F\u002Fwww.nuget.org\u002Fpackages\u002FOzaLog\u002F)\n[![github](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fgithub-OzaLog-blue)](https:\u002F\u002Fgithub.com\u002Fozakboy\u002FOzaLog\u002F)\n\n[English](README.md) | [繁體中文](README_zh-TW.md)\n\n> **免責聲明**：OzaLog 與 [NLog](https:\u002F\u002Fwww.nuget.org\u002Fpackages\u002FNLog)（jkowalski 維護的套件）**完全沒有關係**。本套件為獨立函式庫。\n>\n> **從 `Ozakboy.NLOG` v2.x 升級？** 請看[升級指南](docs\u002Fzh-TW\u002Fmigration.md)。舊套件已棄用並更名為 `OzaLog`。\n>\n> **版本歷史**：[English](docs\u002Fen\u002Fchangelog.md) · [繁體中文](docs\u002Fzh-TW\u002Fchangelog.md)\n\n極簡的 .NET 本地檔案 logging 函式庫，採用最簡單的靜態 API。不需 DI、不需 LoggerFactory，net8+ 零 NuGet 依賴。為高並發多執行緒場景設計（例如加密貨幣報價串流）。\n\n## 為什麼選 OzaLog\n\n- **API 極簡** — `LOG.Info_Log(\"hello\")` 一行就能用，不需任何設定\n- **單一目的** — 只做本地檔案 logging，沒有抽象層\n- **零依賴** — net8+ 目標完全不需 NuGet\n- **HFT 等級熱路徑** — 持久化 FileStream pool + LRU 上限 + 1ms 時間戳快取 + struct 隊列 + drop oldest 反壓\n- **HFT 場景下比 NLog 與 Serilog 都快**（見下方 [Benchmarks](#benchmarks)）\n\n## OzaLog 不是\n\n- ❌ 不是 `Microsoft.Extensions.Logging` provider — 不支援 `ILogger\u003CT>` 注入\n- ❌ 不是結構化 logger — 不捕捉 `{Property}` placeholder\n- ❌ 不是多目標 logger — 只寫檔（沒有 Console \u002F Database \u002F 遠端 sink）\n- ❌ 不能用 XML \u002F appsettings.json 配置 — 只支援程式內配置\n\n如果以上任一是硬性需求，請改用 NLog 或 Serilog。\n\n## 支援框架\n\n- .NET 8.0 \u002F 9.0 \u002F 10.0（LTS + 當前）\n- .NET Standard 2.0 \u002F 2.1（舊版相容）\n\n> **OzaLog v3.0 已移除**：.NET Framework 4.6.2、.NET 6.0、.NET 7.0（皆已 EOL）。\n\n## 安裝\n\n```bash\ndotnet add package OzaLog\n```\n\n或使用 Package Manager Console：\n\n```bash\nInstall-Package OzaLog\n```\n\n## 快速開始\n\n```csharp\nusing OzaLog;\n\nLOG.Info_Log(\"Hello, World!\");\nLOG.Error_Log(\"發生錯誤\");\nLOG.CustomName_Log(\"BTC\", \"tick: 67890.12\");\n```\n\n就這樣 — 不需呼叫 Configure（預設值即可運作）。需進階配置時：\n\n```csharp\nLOG.Configure(o =>\n{\n    o.KeepDays = -7;                          \u002F\u002F 保留最近 7 天的 log\n    o.SetFileSizeInMB(50);                    \u002F\u002F 單檔超過 50MB 自動分割\n    o.EnableAsyncLogging = true;              \u002F\u002F 預設 true\n    o.EnableConsoleOutput = true;             \u002F\u002F 同時輸出到 console\n    o.MaxOpenFileStreams = 100;               \u002F\u002F LRU 上限\n    o.DiskFlushIntervalMs = 100;              \u002F\u002F 定期 flush 間隔\n    o.EnableGlobalExceptionCapture = false;   \u002F\u002F 是否啟用全域意外攔截（預設 false）\n    o.OnDropped = () => Interlocked.Increment(ref _dropCount);\n    o.ConfigureAsync(a =>\n    {\n        a.MaxBatchSize = 1000;\n        a.MaxQueueSize = 100_000;\n        a.FlushIntervalMs = 100;\n    });\n});\n```\n\n## 檔案配置\n\n```\n{AppRoot}\u002F\n└── logs\u002F\n    └── 20260509\u002F                 # yyyyMMdd 日期資料夾\n        └── LogFiles\u002F             # 類別子資料夾（可自訂）\n            ├── Info_Log.txt\n            ├── Error_Log.txt\n            ├── BTC_Log.txt       # CustomName log 寫到這\n            └── ETH_Log.txt\n```\n\n用 `options.LogPath` 改根目錄，用 `options.TypeDirectories.*Path` 給每個層級獨立資料夾。\n\n## 寫入方法\n\n每個層級都有這 5 個多載：\n\n```csharp\nLOG.Info_Log(string message);\nLOG.Info_Log(string message, bool writeTxt);\nLOG.Info_Log(string message, string[] args, bool writeTxt = true, bool immediateFlush = false);\nLOG.Info_Log\u003CT>(T obj, bool writeTxt = true, bool immediateFlush = false) where T : class;\nLOG.Info_Log\u003CT>(string message, T obj, bool writeTxt = true, bool immediateFlush = false) where T : class;\n```\n\n可用層級：`Trace_Log` \u002F `Debug_Log` \u002F `Info_Log` \u002F `Warn_Log` \u002F `Error_Log` \u002F `Fatal_Log`。\n\n自訂 log 類型：\n\n```csharp\nLOG.CustomName_Log(\"BTC\", \"tick: 67890.12\");        \u002F\u002F → BTC_Log.txt\nLOG.CustomName_Log(\"API\", \"外部呼叫\");              \u002F\u002F → API_Log.txt\n```\n\n## 異常記錄\n\n```csharp\ntry { \u002F* 程式碼 *\u002F }\ncatch (Exception ex)\n{\n    LOG.Error_Log(ex);                            \u002F\u002F 自動序列化為 JSON\n    LOG.Error_Log(\"操作上下文\", ex);              \u002F\u002F 含自訂訊息\n}\n```\n\n異常細節（Type、Message、StackTrace、InnerException、Data dictionary、額外屬性）會自動捕捉。\n\n## 全域意外攔截（opt-in）\n\n```csharp\nLOG.Configure(o => o.EnableGlobalExceptionCapture = true);\n```\n\n訂閱 `AppDomain.UnhandledException` 與 `TaskScheduler.UnobservedTaskException`，將任何未攔截的例外以 `Fatal` 等級**同步寫入並 immediate flush**，確保 crash 前 log 落盤。\n\n> 注意：本功能不涵蓋 WPF\u002FWinForms UI thread 異常與 ASP.NET Core middleware 異常 — 那些需要應用程式自行 hook。\n\n## Benchmarks\n\n對 ZLogger 2.5.10、ZeroLog 2.6.1、Serilog 4.2.0 + Sinks.File 6.0.0 比較。.NET 10.0.7、AMD Ryzen 9 9950X3D、BenchmarkDotNet 0.14：\n\n### S1 — 單筆短訊息\n\n| Method | Mean | Allocated |\n|--------|------|-----------|\n| **OzaLog** | **65.96 ns** | 151 B |\n| ZLogger | 219.53 ns | 278 B |\n| ZeroLog | 12.19 ns | 0 B |\n| Serilog | 168.87 ns | 160 B |\n\n### S3 — HFT 8 thread × 50 商品 × 2000 logs = 80 萬筆\n\n| Method | Mean | Allocated |\n|--------|------|-----------|\n| **OzaLog** | **3,047 μs** | 3.94 MB |\n| ZLogger | 4,996 μs | 5.21 KB |\n| ZeroLog | 649 μs | 3.35 KB |\n| Serilog | 11,092 μs | 8.27 MB |\n\n**結論**：OzaLog 在兩個場景都**比 ZLogger 與 Serilog 快**。ZeroLog 純效能贏（用 source generator 達到真零分配），但 OzaLog 的靜態 API 更簡單。\n\n→ 自己跑 benchmark：`dotnet run -c Release --project OzaLog.Benchmarks`\n\n## 授權\n\nMIT License\n\n## 回報與支援\n\n- GitHub Issues：[回報問題](https:\u002F\u002Fgithub.com\u002Fozakboy\u002FOzaLog\u002Fissues)\n- Pull Requests：[貢獻程式碼](https:\u002F\u002Fgithub.com\u002Fozakboy\u002FOzaLog\u002Fpulls)\n"]