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                
此命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用 NuGet 模块的 Install-Package 版本。
<PackageReference Include="nanoFramework.Logging.Stream" Version="1.1.108" />                
对于支持 PackageReference 的项目,将此 XML 节点复制到项目文件中以引用包。
paket add nanoFramework.Logging.Stream --version 1.1.108                
#r "nuget: nanoFramework.Logging.Stream, 1.1.108"                
#r 指令可以用于 F# Interactive 和 Polyglot Notebooks。将此复制到交互式工具或脚本源代码中,以引用包。
// 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                

Quality Gate Status Reliability Rating License NuGet #yourfirstpr Discord

nanoFramework logo


欢迎来到 .NET nanoFramework nanoFramework.Logging 库存储库

构建状态

组件 构建状态 NuGet 包
nanoFramework.Logging Build Status NuGet
nanoFramework.Logging.Serial Build Status NuGet
nanoFramework.Logging.Stream Build Status NuGet
nanoFramework.Logging.Syslog Build Status NuGet

反馈和文档

有关文档、提供反馈、问题以及了解如何贡献,请参阅 主页存储库

加入我们的 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. 
兼容目标框架
包含的目标框架(在包中)
了解更多关于目标框架.NET Standard的信息。

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