import{_ as d,c as p,a as i,d as n,e as o,b as a,w as t,r as h,o as g}from"./app-DlzW8FTI.js";const A={};function c(B,s){const r=h("RouteLink"),k=h("Tabs");return g(),p("div",null,[s[11]||(s[11]=i("h1",{id:"记录日志",tabindex:"-1"},[i("a",{class:"header-anchor",href:"#记录日志"},[i("span",null,"记录日志")])],-1)),s[12]||(s[12]=i("p",null,"有些时候我们需要向日志中写入一些信息,以便于调试或记录运行时状态。本文将介绍如何在 ClassIsland 中使用日志记录器。",-1)),s[13]||(s[13]=i("h2",{id:"获取日志记录器",tabindex:"-1"},[i("a",{class:"header-anchor",href:"#获取日志记录器"},[i("span",null,"获取日志记录器")])],-1)),i("p",null,[s[1]||(s[1]=a("您可以通过")),n(r,{to:"/dev/basics/dependency-injection.html#%E8%8E%B7%E5%8F%96%E6%9C%8D%E5%8A%A1"},{default:t(()=>s[0]||(s[0]=[a("从主机获取")])),_:1}),s[2]||(s[2]=a()),s[3]||(s[3]=i("a",{href:"https://learn.microsoft.com/zh-cn/dotnet/api/microsoft.extensions.logging.ilogger",target:"_blank",rel:"noopener noreferrer"},[i("code",null,"ILogger")],-1)),s[4]||(s[4]=a(" 服务来获取日志记录器,并使用它来将日志记录到日志文件、终端输出、日志窗口等位置。在获取 ")),s[5]||(s[5]=i("a",{href:"https://learn.microsoft.com/zh-cn/dotnet/api/microsoft.extensions.logging.ilogger",target:"_blank",rel:"noopener noreferrer"},[i("code",null,"ILogger")],-1)),s[6]||(s[6]=a(" 服务时,需要通过此接口的泛型参数指定日志记录器的类别,例如:"))]),n(k,{data:[{id:"服务定位器法"},{id:"构造函数注入法"}]},{title0:t(({value:e,isActive:l})=>s[7]||(s[7]=[a("服务定位器法")])),title1:t(({value:e,isActive:l})=>s[8]||(s[8]=[a("构造函数注入法")])),tab0:t(({value:e,isActive:l})=>s[9]||(s[9]=[i("div",{class:"language-csharp line-numbers-mode","data-highlighter":"shiki","data-ext":"csharp",style:{"--shiki-light":"#383A42","--shiki-dark":"#abb2bf","--shiki-light-bg":"#FAFAFA","--shiki-dark-bg":"#282c34"}},[i("pre",{class:"shiki shiki-themes one-light one-dark-pro vp-code"},[i("code",{class:"language-csharp"},[i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#A0A1A7","--shiki-light-font-style":"italic","--shiki-dark":"#7F848E","--shiki-dark-font-style":"italic"}},"// 其中的类别一般填写调用这个日志记录器的类。")]),a(` `),i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#A626A4","--shiki-dark":"#C678DD"}},"var"),i("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#E06C75"}}," logger"),i("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#56B6C2"}}," ="),i("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#E5C07B"}}," IAppHost"),i("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#ABB2BF"}},"."),i("span",{style:{"--shiki-light":"#4078F2","--shiki-dark":"#61AFEF"}},"GetService"),i("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#ABB2BF"}},"<"),i("span",{style:{"--shiki-light":"#C18401","--shiki-dark":"#E5C07B"}},"ILogger"),i("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#ABB2BF"}},"<"),i("span",{style:{"--shiki-light":"#C18401","--shiki-dark":"#E5C07B"}},"MyClass"),i("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#ABB2BF"}},">>();")]),a(` `),i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#E5C07B"}},"logger"),i("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#ABB2BF"}},"."),i("span",{style:{"--shiki-light":"#4078F2","--shiki-dark":"#61AFEF"}},"LogInformation"),i("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#ABB2BF"}},"("),i("span",{style:{"--shiki-light":"#50A14F","--shiki-dark":"#98C379"}},'"Hello World!"'),i("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#ABB2BF"}},");")])])]),i("div",{class:"line-numbers","aria-hidden":"true",style:{"counter-reset":"line-number 0"}},[i("div",{class:"line-number"}),i("div",{class:"line-number"}),i("div",{class:"line-number"})])],-1)])),tab1:t(({value:e,isActive:l})=>s[10]||(s[10]=[i("div",{class:"language-csharp line-numbers-mode","data-highlighter":"shiki","data-ext":"csharp",style:{"--shiki-light":"#383A42","--shiki-dark":"#abb2bf","--shiki-light-bg":"#FAFAFA","--shiki-dark-bg":"#282c34"}},[i("pre",{class:"shiki shiki-themes one-light one-dark-pro vp-code"},[i("code",{class:"language-csharp"},[i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#A0A1A7","--shiki-light-font-style":"italic","--shiki-dark":"#7F848E","--shiki-dark-font-style":"italic"}},"// 其中的类别一般填写调用这个日志记录器的类。")]),a(` `),i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#A626A4","--shiki-dark":"#C678DD"}},"public"),i("span",{style:{"--shiki-light":"#A626A4","--shiki-dark":"#C678DD"}}," class"),i("span",{style:{"--shiki-light":"#C18401","--shiki-dark":"#E5C07B"}}," Demiurge"),i("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#ABB2BF"}},"("),i("span",{style:{"--shiki-light":"#C18401","--shiki-dark":"#E5C07B"}},"ILogger"),i("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#ABB2BF"}},"<"),i("span",{style:{"--shiki-light":"#C18401","--shiki-dark":"#E5C07B"}},"Demiurge"),i("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#ABB2BF"}},"> "),i("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#E5C07B"}},"logger"),i("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#ABB2BF"}},") {")]),a(` `),i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#A626A4","--shiki-dark":"#C678DD"}}," private"),i("span",{style:{"--shiki-light":"#C18401","--shiki-dark":"#E5C07B"}}," ILogger"),i("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#ABB2BF"}},"<"),i("span",{style:{"--shiki-light":"#C18401","--shiki-dark":"#E5C07B"}},"Demiurge"),i("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#ABB2BF"}},"> "),i("span",{style:{"--shiki-light":"#4078F2","--shiki-dark":"#ABB2BF"}},"Logger"),i("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#ABB2BF"}}," { "),i("span",{style:{"--shiki-light":"#A626A4","--shiki-dark":"#C678DD"}},"get"),i("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#ABB2BF"}},"; } "),i("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#56B6C2"}},"="),i("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#E06C75"}}," logger"),i("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#ABB2BF"}},";")]),a(` `),i("span",{class:"line"}),a(` `),i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#A626A4","--shiki-dark":"#C678DD"}}," private"),i("span",{style:{"--shiki-light":"#A626A4","--shiki-dark":"#C678DD"}}," void"),i("span",{style:{"--shiki-light":"#4078F2","--shiki-dark":"#61AFEF"}}," DoSomething"),i("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#ABB2BF"}},"() {")]),a(` `),i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#E5C07B"}}," Logger"),i("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#ABB2BF"}},"."),i("span",{style:{"--shiki-light":"#4078F2","--shiki-dark":"#61AFEF"}},"LogInformation"),i("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#ABB2BF"}},"("),i("span",{style:{"--shiki-light":"#50A14F","--shiki-dark":"#98C379"}},'"Hello World!"'),i("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#ABB2BF"}},");")]),a(` `),i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#ABB2BF"}}," }")]),a(` `),i("span",{class:"line"},[i("span",{style:{"--shiki-light":"#383A42","--shiki-dark":"#ABB2BF"}},"}")])])]),i("div",{class:"line-numbers","aria-hidden":"true",style:{"counter-reset":"line-number 0"}},[i("div",{class:"line-number"}),i("div",{class:"line-number"}),i("div",{class:"line-number"}),i("div",{class:"line-number"}),i("div",{class:"line-number"}),i("div",{class:"line-number"}),i("div",{class:"line-number"}),i("div",{class:"line-number"})])],-1)])),_:1}),s[14]||(s[14]=o(`
在 ClassIsland 中,日志分为以下级别:
| 级别 | 说明 | 在生产环境可见? |
|---|---|---|
| Trace | 跟踪级别的日志,用于记录详细的运行时信息。 | 否 |
| Debug | 调试级别的日志,用于记录调试信息。 | 否 |
| Information | 信息级别的日志,用于记录正常运行时的信息,如完成了某些操作 | 是 |
| Warning | 警告级别的日志,用于记录可能导致问题的情况。 | 是 |
| Error | 错误级别的日志,用于记录运行时错误。 | 是 |
| Critical | 严重错误级别的日志,用于记录非常严重的错误和可能或已经导致应用崩溃的错误。 | 是 |
其中在生产中不可见的日志级别仅在开发环境和启用诊断模式的情况下显示。
注意
需要注意,在 Windows 等平台下,Warning 级别及以上的日志会被一并记录到系统的事件查看器中,高频记录 Warning 级别以上的日志可能会增加系统负担。
调用 ILogger 的 LogXXX 方法即可记录日志,其中 XXX 为要记录的日志级别。例如如果我们要记录一个 Information 级别的日志,那么我们可以这样写:
logger.LogInformation("Hello World!");此外,您还可以在日志消息中包含参数,例如:
logger.LogInformation("Hello {Name}!", "World");如果要在日志信息中包含与这条日志有关的异常信息,可以将异常对象作为参数传递给日志记录方法,例如:
try {
// 一些可能会抛出异常的代码
}
catch (Exception ex) {
logger.LogError(ex, "An error occurred while doing something.");
}