nanoFramework.Logging 1.1.108

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

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();

您可以有三种不同的记录器类型:调试、串行和流。

调试记录器

如前所述,您可以使用 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. 
兼容目标框架
包含的目标框架(在包中)
更多关于目标框架.NET Standard的信息。

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