nanoFramework.Logging.Stream 1.1.108
前缀已保留
dotnet add package nanoFramework.Logging.Stream --version 1.1.108
NuGet\Install-Package nanoFramework.Logging.Stream -Version 1.1.108
<PackageReference Include="nanoFramework.Logging.Stream" Version="1.1.108" />
paket add nanoFramework.Logging.Stream --version 1.1.108
#r "nuget: nanoFramework.Logging.Stream, 1.1.108"
// Install nanoFramework.Logging.Stream as a Cake Addin #addin nuget:?package=nanoFramework.Logging.Stream&version=1.1.108 // Install nanoFramework.Logging.Stream as a Cake Tool #tool nuget:?package=nanoFramework.Logging.Stream&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的。
流日志记录器
与其他类似,您可以在LoggerFactory中使用FileStream或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
- nanoFramework.Logging >= 1.1.108
- nanoFramework.System.IO.FileSystem >= 1.1.54
- nanoFramework.System.Text >= 1.2.54
NuGet包
此包未被任何NuGet包使用。
GitHub代码库 (2)
显示依赖于nanoFramework.Logging_STREAM的前2个最受欢迎的GitHub代码库
代码库 | 星级 |
---|---|
nanoframework/Samples
🍬 nanoFramework团队在测试、概念验证和其他探索性工作中使用的技术示例
|
|
nanoframework/nanoFramework.IoT.Device
📦 此代码库包含各种传感器、芯片、显示屏、帽子以及驱动程序的.NET nanoFramework实现
|
版本 | 下载 | 上次更新 |
---|---|---|
1.1.108 | 108 | 8/1/2024 |
1.1.107 | 130 | 7/23/2024 |
1.1.100 | 383 | 5/15/2024 |
1.1.98 | 60 | 5/13/2024 |
1.1.96 | 95 | 5/10/2024 |
1.1.94 | 254 | 4/10/2024 |
1.1.92 | 95 | 4/9/2024 |
1.1.90 | 84 | 4/8/2024 |
1.1.88 | 120 | 4/4/2024 |
1.1.86 | 99 | 4/3/2024 |
1.1.84 | 84 | 4/3/2024 |
1.1.81 | 438 | 2/1/2024 |
1.1.79 | 108 | 1/26/2024 |
1.1.76 | 519 | 11/16/2023 |
1.1.74 | 177 | 11/10/2023 |
1.1.63 | 2,271 | 1/4/2023 |
1.1.60 | 537 | 12/28/2022 |
1.1.58 | 279 | 12/28/2022 |
1.1.47 | 759 | 10/28/2022 |
1.1.45 | 404 | 10/26/2022 |
1.1.43 | 358 | 10/26/2022 |
1.1.41 | 366 | 10/25/2022 |
1.1.39 | 404 | 10/25/2022 |
1.1.37 | 380 | 10/24/2022 |
1.1.35 | 398 | 10/24/2022 |
1.1.33 | 396 | 10/24/2022 |
1.1.31 | 398 | 10/23/2022 |
1.1.29 | 378 | 10/23/2022 |
1.1.27 | 396 | 10/22/2022 |
1.1.25 | 447 | 10/10/2022 |
1.1.23 | 415 | 10/7/2022 |
1.1.19 | 855 | 9/22/2022 |
1.1.17 | 464 | 9/16/2022 |
1.1.15 | 412 | 9/15/2022 |
1.1.13 | 446 | 9/15/2022 |
1.1.9 | 441 | 9/15/2022 |
1.1.7 | 434 | 9/15/2022 |
1.1.2 | 777 | 8/5/2022 |
1.0.1.29 | 759 | 6/17/2022 |
1.0.1.27 | 425 | 6/16/2022 |
1.0.1.25 | 426 | 6/14/2022 |
1.0.1.23 | 411 | 6/13/2022 |
1.0.1.21 | 440 | 6/9/2022 |
1.0.1.19 | 399 | 6/8/2022 |
1.0.1.15 | 536 | 5/27/2022 |
1.0.1.13 | 482 | 5/19/2022 |
1.0.1.12 | 530 | 5/4/2022 |
1.0.1 | 657 | 3/28/2022 |
1.0.1-preview.32 | 117 | 3/28/2022 |
1.0.1-preview.31 | 120 | 3/28/2022 |
1.0.1-preview.30 | 119 | 3/28/2022 |
1.0.1-preview.28 | 189 | 3/18/2022 |
1.0.1-preview.27 | 122 | 3/17/2022 |
1.0.1-preview.26 | 135 | 3/15/2022 |
1.0.1-preview.25 | 139 | 3/14/2022 |
1.0.1-preview.24 | 135 | 3/11/2022 |
1.0.1-preview.23 | 197 | 2/25/2022 |
1.0.1-preview.21 | 147 | 2/17/2022 |
1.0.1-preview.19 | 144 | 2/11/2022 |
1.0.1-preview.18 | 138 | 2/8/2022 |
1.0.1-preview.17 | 138 | 2/4/2022 |
1.0.1-preview.16 | 165 | 1/28/2022 |
1.0.1-preview.15 | 125 | 1/28/2022 |
1.0.1-preview.14 | 159 | 1/28/2022 |
1.0.1-preview.13 | 154 | 1/27/2022 |
1.0.1-preview.12 | 128 | 1/26/2022 |
1.0.1-preview.11 | 130 | 1/25/2022 |
1.0.1-preview.10 | 128 | 1/25/2022 |
1.0.1-preview.9 | 144 | 1/21/2022 |
1.0.1-preview.8 | 135 | 1/21/2022 |
1.0.1-preview.6 | 131 | 1/14/2022 |
1.0.1-preview.4 | 176 | 1/4/2022 |
1.0.1-preview.3 | 136 | 12/29/2021 |
1.0.0 | 427 | 12/5/2021 |
1.0.0-preview.142 | 150 | 12/5/2021 |
1.0.0-preview.141 | 143 | 12/5/2021 |
1.0.0-preview.137 | 162 | 10/19/2021 |
1.0.0-preview.135 | 189 | 10/18/2021 |
1.0.0-preview.133 | 343 | 10/15/2021 |
1.0.0-preview.131 | 265 | 9/30/2021 |
1.0.0-preview.129 | 170 | 9/27/2021 |
1.0.0-preview.127 | 251 | 9/26/2021 |
1.0.0-preview.122 | 444 | 7/18/2021 |
1.0.0-preview.120 | 240 | 7/17/2021 |
1.0.0-preview.118 | 151 | 7/16/2021 |
1.0.0-preview.116 | 168 | 7/15/2021 |
1.0.0-preview.114 | 171 | 7/14/2021 |
1.0.0-preview.110 | 228 | 6/29/2021 |
1.0.0-preview.108 | 257 | 6/27/2021 |
1.0.0-preview.106 | 163 | 6/21/2021 |
1.0.0-preview.104 | 184 | 6/20/2021 |
1.0.0-preview.102 | 143 | 6/19/2021 |
1.0.0-preview.100 | 152 | 6/19/2021 |
1.0.0-preview.98 | 212 | 6/9/2021 |
1.0.0-preview.96 | 145 | 6/8/2021 |
1.0.0-preview.94 | 165 | 6/7/2021 |
1.0.0-preview.92 | 182 | 6/7/2021 |
1.0.0-preview.90 | 171 | 6/6/2021 |
1.0.0-preview.88 | 257 | 6/5/2021 |
1.0.0-preview.86 | 151 | 6/4/2021 |
1.0.0-preview.84 | 147 | 6/3/2021 |
1.0.0-preview.82 | 187 | 6/3/2021 |
1.0.0-preview.80 | 158 | 6/2/2021 |
1.0.0-preview.78 | 183 | 6/1/2021 |
1.0.0-preview.76 | 197 | 5/31/2021 |
1.0.0-preview.74 | 193 | 5/31/2021 |
1.0.0-preview.72 | 186 | 5/31/2021 |
1.0.0-preview.70 | 209 | 5/30/2021 |
1.0.0-preview.68 | 184 | 5/30/2021 |
1.0.0-preview.66 | 155 | 5/29/2021 |
1.0.0-preview.64 | 159 | 5/27/2021 |
1.0.0-preview.62 | 157 | 5/26/2021 |
1.0.0-preview.60 | 302 | 5/25/2021 |
1.0.0-preview.58 | 281 | 5/23/2021 |
1.0.0-preview.56 | 175 | 5/22/2021 |
1.0.0-preview.54 | 208 | 5/21/2021 |
1.0.0-preview.52 | 212 | 5/20/2021 |
1.0.0-preview.50 | 153 | 5/19/2021 |
1.0.0-preview.48 | 183 | 5/19/2021 |
1.0.0-preview.46 | 268 | 5/16/2021 |
1.0.0-preview.44 | 159 | 5/15/2021 |
1.0.0-preview.42 | 151 | 5/14/2021 |
1.0.0-preview.40 | 162 | 5/13/2021 |
1.0.0-preview.38 | 148 | 5/12/2021 |
1.0.0-preview.36 | 222 | 5/7/2021 |
1.0.0-preview.34 | 212 | 5/6/2021 |
1.0.0-preview.32 | 151 | 5/5/2021 |
1.0.0-preview.30 | 165 | 5/4/2021 |
1.0.0-preview.28 | 156 | 5/4/2021 |
1.0.0-preview.26 | 170 | 4/23/2021 |
1.0.0-preview.25 | 150 | 4/12/2021 |
1.0.0-preview.24 | 167 | 4/10/2021 |
1.0.0-preview.21 | 671 | 4/9/2021 |
1.0.0-preview.19 | 174 | 4/9/2021 |
1.0.0-preview.17 | 185 | 4/8/2021 |
1.0.0-preview.14 | 176 | 4/8/2021 |
1.0.0-preview.13 | 180 | 4/8/2021 |