怎么关掉Hibernate运行是在控制台输出的日志
展开全部
一、ConsoleLogger
如下所示的代码片段展示了由
ConsoleLoggerProvider提供的这个ConsoleLogger类型的定义。ConsoleLogger具有四个属性,代表
Logger名称的Name属性最初由ConsoleLoggerProvider提供,实际上就是LoggerFactory在创建Logger时指定
的日志类型。出于对跨平台的支持,ConsoleLogger对不同平台下控制台进行了抽象并使用接口IConsole来表示,所示代码当前控制台的
Console属性的类型为IConsole。Func<string, LogLevel,
bool>类型的Filter属性提供了一个针对日志类型与等级的过滤条件,是否真正需要将提供的日志消息输出到控制台就由这个过滤条件来决定。最
后一个属性IncludeScopes与上面提到的关联多次日志记录的上下文范围有关,我们后续内容中对此进行单独介绍。
1: public class ConsoleLogger : ILogger
2: {
3: public string Name { get; }
4: public IConsole Console { get; set; }
5: public Func<string, LogLevel, bool> Filter { get; set; }
6: public bool IncludeScopes { get; set; }
7:
8: public ConsoleLogger(string name, Func<string, LogLevel, bool> filter, bool includeScopes);public IDisposable BeginScope<TState>(TState state);
9:
10: public bool IsEnabled(LogLevel logLevel);
11: public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter);
12: public virtual void WriteMessage(LogLevel logLevel, string logName, int eventId, string message);
13: }
对于ConsoleLogger的这四个属性,除了表示当前控制台的Console属性,其余三个均可以在创建它的时候通过构造函数的相应参数来指
定。接下来我们来了解一下用于抽象不同平台控制台的IConsole接口,如下面的代码片段所示,IConsole接口具有如下三个方法。在调用
Write和WriteLine方法写入日志的时候,我们除了指定写入的消息文本之外,还可以控制消息在控制台上的背景和前景颜色。Flush方法与数据
输出缓冲机制有关,如果采用缓冲机制,通过Write或者WriteLine方法写入的消息并不会立即输出到控制台,而是先被保存到缓冲区,Flush方
法被执行的时候会将缓冲区的所有日志消息批量输出到控制台上。
1: public interface IConsole
2: {
3: void Write(string message, ConsoleColor? background, ConsoleColor? foreground);
4: void WriteLine(string message, ConsoleColor? background, ConsoleColor? foreground);
5: void Flush();
6: }
微软默认提供了两种类型的Console类型,一种是基于Windows平台的WindowsLogConsole,非Windows平台的控制台
则通过AnsiLogConsole来表示。它们之间的不同之处在于对日志消息在控制台上显示颜色(前景色和背景色)的控制。对于Windows平台来
说,消息显示在控制台颜色是通过显式设置System.Console的静态属性ForegroundColor和BackgroundColor来实现
的,但是对于非Windows平台来说,颜色信息会直接以基于ASNI标准的转意字符序列(ANSI Esacpe
Sequences)的形式内嵌在消息文本之中)。
ConsoleLogger的IsEnabled方法最终决定了是否需要真正完成对提供日志的写入操作,这方法是由Filter属性返回的
委托对象的执行结果。当Log方法执行的时候,它会先调用IsEnabled方法,如果这个方法返回True,它调用另一个WriteMessage方法
将提供的日志消息输出到由Console属性表示的控制台上。WriteMessage方法是一个虚方法,如果它输出的消息格式和样式不满足我们的要求,
我们可以定义ConsoleLogger的子类,并通过重写这个方法按照我们希望的方式输出日志消息。
1: {LogLevel} : {Category}[{EventId}]
2: {Message}
在默认情况下,被ConsoleLogger输出到控制台上的日志消息会采用上面的格式,这也可以通过我们在上面演示的实例来印证。对于输出到控制
台表示日志等级的部分,输出的文字与对应的日志等级具有如表1所示的映射关系,可以看出日志等级在控制台上均会显示为仅包含四个字母的简写形式。日志等级
也同时决定了改部分内容在控制台上显示的前景色。
如下所示的代码片段展示了由
ConsoleLoggerProvider提供的这个ConsoleLogger类型的定义。ConsoleLogger具有四个属性,代表
Logger名称的Name属性最初由ConsoleLoggerProvider提供,实际上就是LoggerFactory在创建Logger时指定
的日志类型。出于对跨平台的支持,ConsoleLogger对不同平台下控制台进行了抽象并使用接口IConsole来表示,所示代码当前控制台的
Console属性的类型为IConsole。Func<string, LogLevel,
bool>类型的Filter属性提供了一个针对日志类型与等级的过滤条件,是否真正需要将提供的日志消息输出到控制台就由这个过滤条件来决定。最
后一个属性IncludeScopes与上面提到的关联多次日志记录的上下文范围有关,我们后续内容中对此进行单独介绍。
1: public class ConsoleLogger : ILogger
2: {
3: public string Name { get; }
4: public IConsole Console { get; set; }
5: public Func<string, LogLevel, bool> Filter { get; set; }
6: public bool IncludeScopes { get; set; }
7:
8: public ConsoleLogger(string name, Func<string, LogLevel, bool> filter, bool includeScopes);public IDisposable BeginScope<TState>(TState state);
9:
10: public bool IsEnabled(LogLevel logLevel);
11: public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter);
12: public virtual void WriteMessage(LogLevel logLevel, string logName, int eventId, string message);
13: }
对于ConsoleLogger的这四个属性,除了表示当前控制台的Console属性,其余三个均可以在创建它的时候通过构造函数的相应参数来指
定。接下来我们来了解一下用于抽象不同平台控制台的IConsole接口,如下面的代码片段所示,IConsole接口具有如下三个方法。在调用
Write和WriteLine方法写入日志的时候,我们除了指定写入的消息文本之外,还可以控制消息在控制台上的背景和前景颜色。Flush方法与数据
输出缓冲机制有关,如果采用缓冲机制,通过Write或者WriteLine方法写入的消息并不会立即输出到控制台,而是先被保存到缓冲区,Flush方
法被执行的时候会将缓冲区的所有日志消息批量输出到控制台上。
1: public interface IConsole
2: {
3: void Write(string message, ConsoleColor? background, ConsoleColor? foreground);
4: void WriteLine(string message, ConsoleColor? background, ConsoleColor? foreground);
5: void Flush();
6: }
微软默认提供了两种类型的Console类型,一种是基于Windows平台的WindowsLogConsole,非Windows平台的控制台
则通过AnsiLogConsole来表示。它们之间的不同之处在于对日志消息在控制台上显示颜色(前景色和背景色)的控制。对于Windows平台来
说,消息显示在控制台颜色是通过显式设置System.Console的静态属性ForegroundColor和BackgroundColor来实现
的,但是对于非Windows平台来说,颜色信息会直接以基于ASNI标准的转意字符序列(ANSI Esacpe
Sequences)的形式内嵌在消息文本之中)。
ConsoleLogger的IsEnabled方法最终决定了是否需要真正完成对提供日志的写入操作,这方法是由Filter属性返回的
委托对象的执行结果。当Log方法执行的时候,它会先调用IsEnabled方法,如果这个方法返回True,它调用另一个WriteMessage方法
将提供的日志消息输出到由Console属性表示的控制台上。WriteMessage方法是一个虚方法,如果它输出的消息格式和样式不满足我们的要求,
我们可以定义ConsoleLogger的子类,并通过重写这个方法按照我们希望的方式输出日志消息。
1: {LogLevel} : {Category}[{EventId}]
2: {Message}
在默认情况下,被ConsoleLogger输出到控制台上的日志消息会采用上面的格式,这也可以通过我们在上面演示的实例来印证。对于输出到控制
台表示日志等级的部分,输出的文字与对应的日志等级具有如表1所示的映射关系,可以看出日志等级在控制台上均会显示为仅包含四个字母的简写形式。日志等级
也同时决定了改部分内容在控制台上显示的前景色。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询