nanoFramework.Logging 1.1.108
前缀已保留
dotnet add package nanoFramework.Logging --version 1.1.108
NuGet\Install-Package nanoFramework.Logging -Version 1.1.108
<PackageReference Include="nanoFramework.Logging" Version="1.1.108" />
paket add nanoFramework.Logging --version 1.1.108
#r "nuget: nanoFramework.Logging, 1.1.108"
// Install nanoFramework.Logging as a Cake Addin #addin nuget:?package=nanoFramework.Logging&version=1.1.108 // Install nanoFramework.Logging as a Cake Tool #tool nuget:?package=nanoFramework.Logging&version=1.1.108
欢迎使用 .NET nanoFramework nanoFramework.Logging 库存储库
构建状态
组件 | 构建状态 | NuGet 包 |
---|---|---|
nanoFramework.Logging | ||
nanoFramework.Logging.Serial | ||
nanoFramework.Logging.Stream | ||
nanoFramework.Logging.Syslog |
反馈和文档
有关文档、提供反馈、问题以及了解如何贡献,请参阅此存储库的首页。
加入我们的 Discord 社区这里。
鸣谢
该项目贡献者列表可在CONTRIBUTORS中找到。
许可证
nanoFramework 类库受MIT 许可证的许可。
使用方法
在您的类中,确保您有一个全局 ILogger 声明,并在您的构造函数中调用 _logger = this.GetCurrentClassLogger();
using Microsoft.Extensions.Logging;
using nanoFramework.Logging;
using System;
namespace UnitTestDebugLogging
{
internal class MyTestComponent
{
private ILogger _logger;
public MyTestComponent()
{
_logger = this.GetCurrentClassLogger();
}
public void DoSomeLogging()
{
_logger.LogInformation("An informative message");
_logger.LogError("An error situation");
_logger.LogWarning(new Exception("Something is not supported"), "With exception context");
}
}
}
在您的主代码中,您需要创建一个记录器
LogDispatcher.LoggerFactory = new DebugLoggerFactory();
// Then you can create your object and the logging will happen
MyTestComponent test = new MyTestComponent();
test.DoSomeLogging();
您可以有三种不同的记录器类型:调试、串行和流。
调试记录器
如前所述,您可以使用 Factory 模式
LogDispatcher.LoggerFactory = new DebugLoggerFactory();
// Then you can create your object and the logging will happen
MyTestComponent test = new MyTestComponent();
test.DoSomeLogging();
您同样可以直接创建一个 DebugLogger
DebugLogger _logger;
_logger = new DebugLogger("test");
_logger.MinLogLevel = LogLevel.Trace;
_logger.LogTrace("This is a trace");
串行日志记录器
您可以使用工厂模式
LogDispatcher.LoggerFactory = new SerialLoggerFactory("COM6");
// Then you can create your object and the logging will happen
MyTestComponent test = new MyTestComponent();
test.DoSomeLogging();
注意,您可以根据需要调整波特率和所有其他元素。
或直接使用SerialLogger
SerialPort _serial;
_serial = new SerialPort("COM6", 115200);
SerialLogger _logger = new SerialLogger(ref _serial);
_logger.MinLogLevel = LogLevel.Trace;
_logger.LogTrace("This is a trace");
重要:请确保参考您板子的文档来了解如何正确设置串行端口。测试中包含了ESP32的示例。
流日志记录器
与之前的类似,您可以使用FileStream或LoggerFactory中的Stream
MemoryStream memoryStream = new MemoryStream();
LogDispatcher.LoggerFactory = new StreamLoggerFactory(memoryStream);
MyTestComponent test = new MyTestComponent();
test.DoSomeLogging();
你同样可以直接使用它
var _stream = new FileStream("D:\\mylog.txt", FileMode.Open, FileAccess.ReadWrite);
StreamLogger _logger = new StreamLogger(_stream);
_logger.MinLogLevel = LogLevel.Trace;
_logger.LogTrace("This is a trace");
重要:请在尝试设置日志记录器之前,参考USB和SD卡读卡器的文档,确保它们已正确设置。
创建自定义日志记录器
您可以使用ILogger和ILoggerFactory接口创建自己的日志记录器。DebugLogger是最简单的一种。
日志扩展
提供了不同的日志扩展以帮助您以所需的方式记录。您可以简单地记录一个字符串,也可以有参数以及异常和EventId
_logger.LogTrace("TRACE {0} {1}", new object[] { "param 1", 42 });
_logger.LogDebug("DEBUG {0} {1}", new object[] { "param 1", 42 });
_logger.LogInformation("INFORMATION and nothing else");
_logger.LogWarning("WARNING {0} {1}", new object[] { "param 1", 42 });
_logger.LogError(new Exception("Big problem"), "ERROR {0} {1}", new object[] { "param 1", 42 });
_logger.LogCritical(42, new Exception("Insane problem"), "CRITICAL {0} {1}", new object[] { "param 1", 42 });
请注意,所有日志级别扩展都至少有字符串日志记录,直到EventId、字符串、参数和异常。参数存在时,您负责正确地格式化字符串。
日志级别
您可以在预定义的日志记录器中调整日志级别。例如
DebugLogger _logger;
_logger = new DebugLogger("test");
_logger.MinLogLevel = LogLevel.Trace;
_logger.LogTrace("This will be displayed");
_logger.LogCritical("Critical message will be displayed");
_logger.MinLogLevel = LogLevel.Critical;
_logger.LogTrace("This won't be displayed, only critical will be");
_logger.LogCritical("Critical message will be displayed");
创建自定义格式化
您可以使用自定义格式化程序,这将提供日志记录器的名称、日志级别、事件ID、消息本身以及潜在的异常。函数定义应遵循以下模式
public interface IMessageFormatter
{
string MessageFormatter(string className, LogLevel logLevel, EventId eventId, string state, Exception exception);
}
重要:此函数将直接调用,而无需创建它所属的类的实例。因此,请确保该函数是静态的,或者它是使用日志记录器类的一部分。静态选项总是可行的。该接口提供方便并给出格式。
要设置格式化,请使用以下行。包含函数的类的类型和函数的准确名称是必需的。
LoggerExtensions.MessageFormatter = typeof(MyFormatter).GetType().GetMethod("MessageFormatterStatic");
public class MyFormatter
{
public string MessageFormatterStatic(string className, LogLevel logLevel, EventId eventId, string state, Exception exception)
{
string logstr = string.Empty;
switch (logLevel)
{
case LogLevel.Trace:
logstr = "TRACE: ";
break;
case LogLevel.Debug:
logstr = "I love debug: ";
break;
case LogLevel.Warning:
logstr = "WARNING: ";
break;
case LogLevel.Error:
logstr = "ERROR: ";
break;
case LogLevel.Critical:
logstr = "CRITICAL:";
break;
case LogLevel.None:
case LogLevel.Information:
default:
break;
}
string eventstr = eventId.Id != 0 ? $" Event ID: {eventId}, " : string.Empty;
string msg = $"[{className}] {eventstr}{logstr} {state}";
if (exception != null)
{
msg += $" {exception}";
}
return msg;
}
}
您可以使用任何内容,并按照您的喜好格式化消息。
注意:在末尾添加\r\n是不必要的,每个日志记录器都会完成这项工作。
行为准则
本项目已采用由贡献者公约定义的行为准则,以明确我们社区中的预期行为。有关更多信息,请参阅.NET Foundation 行为准则。
.NET Foundation
本项目由.NET Foundation 支持。
产品 | 版本 兼容和额外的计算目标框架版本。 |
---|---|
.NET Framework | net is compatible. |
-
- nanoFramework.CoreLibrary (>= 1.15.5)
NuGet 包 (16)
显示依赖于nanoFramework.Logging的前5个NuGet包
包 | 下载 |
---|---|
nanoFramework.Logging.Stream 此包包括nanoFramework.Logging.Stream程序集(仅限流日志记录)用于.NET nanoFramework C#项目。还有只包含串行日志记录器的包,以及包含基本Debug Logger的包。 |
|
nanoFramework.Logging.Serial 此包包含nanoFramework.Logging.Serial程序集(仅串行日志),用于.NET nanoFramework C#项目。还有一个仅包含流日志的包,另一个包含基本的调试日志。 |
|
nanoFramework.Iot.Device.Mfrc522 此包包含.NET IoT Core绑定Iot.Device.Mfrc522,用于.NET nanoFramework C#项目。 |
|
nanoFramework.Iot.Device.Pn532 此包包含.NET IoT Core绑定Iot.Device.Pn532,用于.NET nanoFramework C#项目。 |
|
nanoFramework.Iot.Device.Pn5180 此包包含.NET IoT Core绑定Iot.Device.Pn5180,用于.NET nanoFramework C#项目。 |
GitHub仓库 (2)
显示依赖nanoFramework.Logging的最流行的2个GitHub仓库
仓库 | 星标 |
---|---|
nanoframework/Samples
🍬 nanoFramework团队在测试、概念证明和其他探索性工作中使用的代码示例
|
|
nanoframework/nanoFramework.IoT.Device
📦 此仓库包含各种传感器、芯片、显示屏、帽子和你驱动程序的.NET nanoFramework实现
|
版本 | 下载 | 最后更新 |
---|---|---|
1.1.108 | 1,046 | 8/1/2024 |
1.1.107 | 631 | 7/23/2024 |
1.1.100 | 4,019 | 5/15/2024 |
1.1.98 | 395 | 5/13/2024 |
1.1.96 | 540 | 5/10/2024 |
1.1.94 | 2,069 | 4/10/2024 |
1.1.92 | 345 | 4/9/2024 |
1.1.90 | 163 | 4/8/2024 |
1.1.88 | 698 | 4/4/2024 |
1.1.86 | 328 | 4/3/2024 |
1.1.84 | 181 | 4/3/2024 |
1.1.81 | 3,332 | 2/1/2024 |
1.1.79 | 815 | 1/26/2024 |
1.1.76 | 4,754 | 11/16/2023 |
1.1.74 | 1,983 | 11/10/2023 |
1.1.63 | 15,988 | 1/4/2023 |
1.1.60 | 1,790 | 12/28/2022 |
1.1.58 | 961 | 12/28/2022 |
1.1.47 | 3,900 | 10/28/2022 |
1.1.45 | 1,383 | 10/26/2022 |
1.1.43 | 1,077 | 10/26/2022 |
1.1.41 | 2,227 | 10/25/2022 |
1.1.39 | 1,117 | 10/25/2022 |
1.1.37 | 1,409 | 10/24/2022 |
1.1.35 | 1,155 | 10/24/2022 |
1.1.33 | 1,188 | 10/24/2022 |
1.1.31 | 1,411 | 10/23/2022 |
1.1.29 | 1,149 | 10/23/2022 |
1.1.27 | 1,936 | 10/22/2022 |
1.1.25 | 3,309 | 10/10/2022 |
1.1.23 | 2,567 | 10/7/2022 |
1.1.19 | 2,656 | 9/22/2022 |
1.1.17 | 2,279 | 9/16/2022 |
1.1.15 | 1,249 | 9/15/2022 |
1.1.13 | 1,270 | 9/15/2022 |
1.1.9 | 1,304 | 9/15/2022 |
1.1.7 | 1,261 | 9/15/2022 |
1.1.2 | 5,315 | 8/5/2022 |
1.0.1.29 | 6,263 | 6/17/2022 |
1.0.1.27 | 2,093 | 6/16/2022 |
1.0.1.25 | 2,060 | 6/14/2022 |
1.0.1.23 | 2,024 | 6/13/2022 |
1.0.1.21 | 1,259 | 6/9/2022 |
1.0.1.19 | 1,280 | 6/8/2022 |
1.0.1.15 | 2,238 | 5/27/2022 |
1.0.1.13 | 2,688 | 5/19/2022 |
1.0.1.12 | 2,156 | 5/4/2022 |
1.0.1 | 5,632 | 3/28/2022 |
1.0.1-preview.32 | 124 | 3/28/2022 |
1.0.1-preview.31 | 119 | 3/28/2022 |
1.0.1-preview.30 | 125 | 3/28/2022 |
1.0.1-preview.28 | 194 | 3/18/2022 |
1.0.1-preview.27 | 125 | 3/17/2022 |
1.0.1-preview.26 | 133 | 3/15/2022 |
1.0.1-preview.25 | 144 | 3/14/2022 |
1.0.1-preview.24 | 137 | 3/11/2022 |
1.0.1-preview.23 | 197 | 2/25/2022 |
1.0.1-preview.21 | 197 | 2/17/2022 |
1.0.1-preview.19 | 163 | 2/11/2022 |
1.0.1-preview.18 | 149 | 2/8/2022 |
1.0.1-preview.17 | 154 | 2/4/2022 |
1.0.1-preview.16 | 176 | 1/28/2022 |
1.0.1-preview.15 | 153 | 1/28/2022 |
1.0.1-preview.14 | 166 | 1/28/2022 |
1.0.1-preview.13 | 166 | 1/27/2022 |
1.0.1-preview.12 | 134 | 1/26/2022 |
1.0.1-preview.11 | 133 | 1/25/2022 |
1.0.1-preview.10 | 149 | 1/25/2022 |
1.0.1-preview.9 | 160 | 1/21/2022 |
1.0.1-preview.8 | 137 | 1/21/2022 |
1.0.1-preview.6 | 185 | 1/14/2022 |
1.0.1-preview.4 | 197 | 1/4/2022 |
1.0.1-preview.3 | 139 | 12/29/2021 |
1.0.0 | 1,527 | 12/5/2021 |
1.0.0-preview.142 | 159 | 12/5/2021 |
1.0.0-preview.141 | 149 | 12/5/2021 |
1.0.0-preview.137 | 282 | 10/19/2021 |
1.0.0-preview.135 | 198 | 10/18/2021 |
1.0.0-preview.133 | 349 | 10/15/2021 |
1.0.0-preview.131 | 291 | 9/30/2021 |
1.0.0-preview.129 | 187 | 9/27/2021 |
1.0.0-preview.127 | 260 | 9/26/2021 |
1.0.0-preview.122 | 905 | 7/18/2021 |
1.0.0-preview.120 | 253 | 7/17/2021 |
1.0.0-preview.118 | 562 | 7/16/2021 |
1.0.0-preview.116 | 172 | 7/15/2021 |
1.0.0-preview.114 | 199 | 7/14/2021 |
1.0.0-preview.110 | 262 | 6/29/2021 |
1.0.0-preview.108 | 260 | 6/27/2021 |
1.0.0-preview.106 | 168 | 6/21/2021 |
1.0.0-preview.104 | 190 | 6/20/2021 |
1.0.0-preview.102 | 151 | 6/19/2021 |
1.0.0-preview.100 | 156 | 6/19/2021 |
1.0.0-preview.98 | 217 | 6/9/2021 |
1.0.0-preview.96 | 175 | 6/8/2021 |
1.0.0-preview.94 | 165 | 6/7/2021 |
1.0.0-preview.92 | 194 | 6/7/2021 |
1.0.0-preview.90 | 172 | 6/6/2021 |
1.0.0-preview.88 | 267 | 6/5/2021 |
1.0.0-preview.86 | 161 | 6/4/2021 |
1.0.0-preview.84 | 145 | 6/3/2021 |
1.0.0-preview.82 | 185 | 6/3/2021 |
1.0.0-preview.80 | 161 | 6/2/2021 |
1.0.0-preview.78 | 190 | 6/1/2021 |
1.0.0-preview.76 | 187 | 5/31/2021 |
1.0.0-preview.74 | 199 | 5/31/2021 |
1.0.0-preview.72 | 191 | 5/31/2021 |
1.0.0-preview.70 | 223 | 5/30/2021 |
1.0.0-preview.68 | 194 | 5/30/2021 |
1.0.0-preview.66 | 156 | 5/29/2021 |
1.0.0-preview.64 | 159 | 5/27/2021 |
1.0.0-preview.62 | 167 | 5/26/2021 |
1.0.0-preview.60 | 305 | 5/25/2021 |
1.0.0-preview.58 | 287 | 5/23/2021 |
1.0.0-preview.56 | 180 | 5/22/2021 |
1.0.0-preview.54 | 213 | 5/21/2021 |
1.0.0-preview.52 | 222 | 5/20/2021 |
1.0.0-preview.50 | 156 | 5/19/2021 |
1.0.0-preview.48 | 184 | 5/19/2021 |
1.0.0-preview.46 | 274 | 5/16/2021 |
1.0.0-preview.44 | 165 | 5/15/2021 |
1.0.0-preview.42 | 162 | 5/14/2021 |
1.0.0-preview.40 | 171 | 5/13/2021 |
1.0.0-preview.38 | 160 | 5/12/2021 |
1.0.0-preview.36 | 220 | 5/7/2021 |
1.0.0-preview.34 | 215 | 5/6/2021 |
1.0.0-preview.32 | 164 | 5/5/2021 |
1.0.0-preview.30 | 168 | 5/4/2021 |
1.0.0-preview.28 | 159 | 5/4/2021 |
1.0.0-preview.26 | 177 | 4/23/2021 |
1.0.0-preview.25 | 166 | 4/12/2021 |
1.0.0-preview.24 | 176 | 4/10/2021 |
1.0.0-preview.21 | 679 | 4/9/2021 |
1.0.0-preview.19 | 173 | 4/9/2021 |
1.0.0-preview.17 | 185 | 4/8/2021 |
1.0.0-preview.14 | 182 | 4/8/2021 |
1.0.0-preview.13 | 185 | 4/8/2021 |