nanoFramework.Logging.Serial 1.1.108
前缀已保留
dotnet add package nanoFramework.Logging.Serial --version 1.1.108
NuGet\Install-Package nanoFramework.Logging.Serial -Version 1.1.108
<PackageReference Include="nanoFramework.Logging.Serial" Version="1.1.108" />
paket add nanoFramework.Logging.Serial --version 1.1.108
#r "nuget: nanoFramework.Logging.Serial, 1.1.108"
// Install nanoFramework.Logging.Serial as a Cake Addin #addin nuget:?package=nanoFramework.Logging.Serial&version=1.1.108 // Install nanoFramework.Logging.Serial as a Cake Tool #tool nuget:?package=nanoFramework.Logging.Serial&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();
您可以使用3种不同的日志记录器:调试、串行和流。
调试日志记录器
如前所述,您可以使用工厂模式
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是兼容的。 |
-
- nanoFramework.CoreLibrary (>= 1.15.5)
- nanoFramework.Logging (>= 1.1.108)
- nanoFramework.Runtime.Events (>= 1.11.18)
- nanoFramework.System.Collections (>= 1.5.31)
- nanoFramework.System.IO.Ports (>= 1.1.86)
- nanoFramework.System.Text (>= 1.2.54)
NuGet包
此包由任何NuGet包使用。
GitHub仓库 (1)
展示依赖nanoFramework.Logging.Serial的GitHub仓库排行榜前1名
仓库 | 星星 |
---|---|
nanoframework/Samples
🍬 nanoFramework团队在测试、概念验证和其他探索性工作中使用的一段代码示例
|
版本 | 下载 | 最后更新 |
---|---|---|
1.1.108 | 51 | 8/1/2024 |
1.1.107 | 63 | 7/23/2024 |
1.1.100 | 148 | 5/15/2024 |
1.1.98 | 83 | 5/13/2024 |
1.1.96 | 111 | 5/10/2024 |
1.1.94 | 140 | 4/10/2024 |
1.1.92 | 88 | 4/9/2024 |
1.1.90 | 86 | 4/8/2024 |
1.1.88 | 113 | 4/4/2024 |
1.1.86 | 87 | 4/3/2024 |
1.1.84 | 94 | 4/3/2024 |
1.1.81 | 186 | 2/1/2024 |
1.1.79 | 89 | 1/26/2024 |
1.1.76 | 315 | 11/16/2023 |
1.1.74 | 128 | 11/10/2023 |
1.1.63 | 762 | 1/4/2023 |
1.1.60 | 346 | 12/28/2022 |
1.1.58 | 314 | 12/28/2022 |
1.1.47 | 583 | 10/28/2022 |
1.1.45 | 425 | 10/26/2022 |
1.1.43 | 408 | 10/26/2022 |
1.1.41 | 410 | 10/25/2022 |
1.1.39 | 425 | 10/25/2022 |
1.1.37 | 407 | 10/24/2022 |
1.1.35 | 426 | 10/24/2022 |
1.1.33 | 439 | 10/24/2022 |
1.1.31 | 422 | 10/23/2022 |
1.1.29 | 423 | 10/23/2022 |
1.1.27 | 418 | 10/22/2022 |
1.1.25 | 435 | 10/10/2022 |
1.1.23 | 399 | 10/7/2022 |
1.1.19 | 469 | 9/22/2022 |
1.1.17 | 494 | 9/16/2022 |
1.1.15 | 460 | 9/15/2022 |
1.1.13 | 479 | 9/15/2022 |
1.1.9 | 496 | 9/15/2022 |
1.1.7 | 481 | 9/15/2022 |
1.1.2 | 514 | 8/5/2022 |
1.0.1.29 | 551 | 6/17/2022 |
1.0.1.27 | 454 | 6/16/2022 |
1.0.1.25 | 433 | 6/14/2022 |
1.0.1.23 | 434 | 6/13/2022 |
1.0.1.21 | 462 | 6/9/2022 |
1.0.1.19 | 442 | 6/8/2022 |
1.0.1.15 | 472 | 5/27/2022 |
1.0.1.13 | 474 | 5/19/2022 |
1.0.1.12 | 511 | 5/4/2022 |
1.0.1 | 601 | 3/28/2022 |
1.0.1-preview.32 | 115 | 3/28/2022 |
1.0.1-preview.31 | 110 | 3/28/2022 |
1.0.1-preview.30 | 106 | 3/28/2022 |
1.0.1-preview.28 | 118 | 3/18/2022 |
1.0.1-preview.27 | 108 | 3/17/2022 |
1.0.1-preview.26 | 102 | 3/15/2022 |
1.0.1-preview.25 | 104 | 3/14/2022 |
1.0.1-preview.24 | 99 | 3/11/2022 |
1.0.1-preview.23 | 113 | 2/25/2022 |
1.0.1-preview.21 | 159 | 2/17/2022 |
1.0.1-preview.19 | 117 | 2/11/2022 |
1.0.1-preview.18 | 113 | 2/8/2022 |
1.0.1-preview.17 | 126 | 2/4/2022 |
1.0.1-preview.16 | 126 | 1/28/2022 |
1.0.1-preview.15 | 117 | 1/28/2022 |
1.0.1-preview.14 | 122 | 1/28/2022 |
1.0.1-preview.13 | 123 | 1/27/2022 |
1.0.1-preview.12 | 125 | 1/26/2022 |
1.0.1-preview.11 | 126 | 1/25/2022 |
1.0.1-preview.10 | 122 | 1/25/2022 |
1.0.1-preview.9 | 132 | 1/21/2022 |
1.0.1-preview.8 | 119 | 1/21/2022 |
1.0.1-preview.6 | 136 | 1/14/2022 |
1.0.1-preview.4 | 130 | 1/4/2022 |
1.0.1-preview.3 | 125 | 12/29/2021 |
1.0.0 | 533 | 12/5/2021 |
1.0.0-preview.142 | 142 | 12/5/2021 |
1.0.0-preview.141 | 144 | 12/5/2021 |
1.0.0-preview.137 | 138 | 10/19/2021 |
1.0.0-preview.135 | 180 | 10/18/2021 |
1.0.0-preview.133 | 179 | 10/15/2021 |
1.0.0-preview.131 | 169 | 9/30/2021 |
1.0.0-preview.129 | 154 | 9/27/2021 |
1.0.0-preview.127 | 246 | 9/26/2021 |
1.0.0-preview.122 | 653 | 7/18/2021 |
1.0.0-preview.120 | 219 | 7/17/2021 |
1.0.0-preview.118 | 144 | 7/16/2021 |
1.0.0-preview.116 | 159 | 7/15/2021 |
1.0.0-preview.114 | 159 | 7/14/2021 |
1.0.0-preview.110 | 188 | 6/29/2021 |
1.0.0-preview.108 | 254 | 6/27/2021 |
1.0.0-preview.106 | 159 | 6/21/2021 |
1.0.0-preview.104 | 179 | 6/20/2021 |
1.0.0-preview.102 | 138 | 6/19/2021 |
1.0.0-preview.100 | 141 | 6/19/2021 |
1.0.0-preview.98 | 217 | 6/9/2021 |
1.0.0-preview.96 | 166 | 6/8/2021 |
1.0.0-preview.94 | 154 | 6/7/2021 |
1.0.0-preview.92 | 183 | 6/7/2021 |
1.0.0-preview.90 | 167 | 6/6/2021 |
1.0.0-preview.88 | 253 | 6/5/2021 |
1.0.0-preview.86 | 144 | 6/4/2021 |
1.0.0-preview.84 | 146 | 6/3/2021 |
1.0.0-preview.82 | 173 | 6/3/2021 |
1.0.0-preview.80 | 153 | 6/2/2021 |
1.0.0-preview.78 | 177 | 6/1/2021 |
1.0.0-preview.76 | 186 | 5/31/2021 |
1.0.0-preview.74 | 187 | 5/31/2021 |
1.0.0-preview.72 | 184 | 5/31/2021 |
1.0.0-preview.70 | 211 | 5/30/2021 |
1.0.0-preview.68 | 181 | 5/30/2021 |
1.0.0-preview.66 | 152 | 5/29/2021 |
1.0.0-preview.64 | 152 | 5/27/2021 |
1.0.0-preview.62 | 155 | 5/26/2021 |
1.0.0-preview.60 | 188 | 5/25/2021 |
1.0.0-preview.58 | 279 | 5/23/2021 |
1.0.0-preview.56 | 171 | 5/22/2021 |
1.0.0-preview.54 | 204 | 5/21/2021 |
1.0.0-preview.52 | 207 | 5/20/2021 |
1.0.0-preview.50 | 144 | 5/19/2021 |
1.0.0-preview.48 | 176 | 5/19/2021 |
1.0.0-preview.46 | 268 | 5/16/2021 |
1.0.0-preview.44 | 163 | 5/15/2021 |
1.0.0-preview.42 | 152 | 5/14/2021 |
1.0.0-preview.40 | 166 | 5/13/2021 |
1.0.0-preview.38 | 139 | 5/12/2021 |
1.0.0-preview.36 | 214 | 5/7/2021 |
1.0.0-preview.34 | 209 | 5/6/2021 |
1.0.0-preview.32 | 142 | 5/5/2021 |
1.0.0-preview.30 | 161 | 5/4/2021 |
1.0.0-preview.28 | 146 | 5/4/2021 |
1.0.0-preview.26 | 168 | 4/23/2021 |
1.0.0-preview.25 | 147 | 4/12/2021 |
1.0.0-preview.24 | 158 | 4/10/2021 |
1.0.0-preview.21 | 675 | 4/9/2021 |
1.0.0-preview.19 | 169 | 4/9/2021 |
1.0.0-preview.17 | 169 | 4/8/2021 |
1.0.0-preview.14 | 175 | 4/8/2021 |
1.0.0-preview.13 | 177 | 4/8/2021 |