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

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的示例。

流日志记录器

与其他类似,您可以使用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是兼容的。
兼容的目标框架
包含的目标框架(在包中)
了解有关目标框架.NET Standard的更多信息。

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