nanoFramework.Logging.Syslog 1.1.108

前缀已保留
dotnet add package nanoFramework.Logging.Syslog --version 1.1.108                
NuGet\Install-Package nanoFramework.Logging.Syslog -Version 1.1.108                
此命令适用于 Visual Studio 的包管理器控制台,因为它使用了 NuGet 模块的 Install-Package 版本。
<PackageReference Include="nanoFramework.Logging.Syslog" Version="1.1.108" />                
对于支持 PackageReference 的项目,将此 XML 节点复制到项目文件以引用该软件包。
paket add nanoFramework.Logging.Syslog --version 1.1.108                
#r "nuget: nanoFramework.Logging.Syslog, 1.1.108"                
#r 指令可以在 F# Interactive 和 Polyglot Notebooks 中使用。将此内容复制到交互工具或脚本的源代码中以引用软件包。
// Install nanoFramework.Logging.Syslog as a Cake Addin
#addin nuget:?package=nanoFramework.Logging.Syslog&version=1.1.108

// Install nanoFramework.Logging.Syslog as a Cake Tool
#tool nuget:?package=nanoFramework.Logging.Syslog&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 基金会行为准则

.NET 基金会

此项目得到 .NET 基金会 的支持。

产品 兼容和附加计算目标框架版本。
.NET Framework net 是兼容的。
兼容目标框架
包含目标框架(在包中)
了解有关 目标框架.NET Standard 的更多信息。

NuGet 包

此包未被任何 NuGet 包使用。

GitHub 仓库

本包未被任何流行的GitHub仓库使用。

版本 下载 最后更新
1.1.108 58 8/1/2024
1.1.107 44 7/23/2024
1.1.100 102 5/15/2024
1.1.98 78 5/13/2024
1.1.96 91 5/10/2024
1.1.94 106 4/10/2024
1.1.92 103 4/9/2024
1.1.90 99 4/8/2024
1.1.88 95 4/4/2024
1.1.86 100 4/3/2024
1.1.84 94 4/3/2024
1.1.81 101 2/1/2024
1.1.79 86 1/26/2024
1.1.76 188 11/16/2023
1.1.74 100 11/10/2023
1.1.63 360 1/4/2023
1.1.60 283 12/28/2022
1.1.58 270 12/28/2022
1.1.47 497 10/28/2022
1.1.45 396 10/26/2022
1.1.43 353 10/26/2022
1.1.41 355 10/25/2022
1.1.39 361 10/25/2022
1.1.37 389 10/24/2022
1.1.35 414 10/24/2022
1.1.33 397 10/24/2022
1.1.31 393 10/23/2022
1.1.29 408 10/23/2022
1.1.27 395 10/22/2022
1.1.25 390 10/10/2022
1.1.23 377 10/7/2022
1.1.19 430 9/22/2022
1.1.17 435 9/16/2022
1.1.15 397 9/15/2022
1.1.13 430 9/15/2022
1.1.9 447 9/15/2022
1.1.7 426 9/15/2022
1.1.2 414 8/5/2022
1.0.1.29 424 6/17/2022
1.0.1.27 418 6/16/2022
1.0.1.25 409 6/14/2022
1.0.1.23 399 6/13/2022
1.0.1.21 417 6/9/2022
1.0.1.19 438 6/8/2022
1.0.1.15 387 5/27/2022
1.0.1.13 420 5/19/2022
1.0.1.12 425 5/4/2022
1.0.1 424 3/28/2022
1.0.1-preview.32 122 3/28/2022
1.0.1-preview.31 117 3/28/2022
1.0.1-preview.30 110 3/28/2022
1.0.1-preview.28 120 3/18/2022
1.0.1-preview.27 117 3/17/2022
1.0.1-preview.26 113 3/15/2022
1.0.1-preview.25 112 3/14/2022
1.0.1-preview.24 105 3/11/2022
1.0.1-preview.23 116 2/25/2022
1.0.1-preview.21 121 2/17/2022
1.0.1-preview.19 105 2/11/2022
1.0.1-preview.18 119 2/8/2022
1.0.1-preview.17 129 2/4/2022
1.0.1-preview.16 129 1/28/2022
1.0.1-preview.15 122 1/28/2022
1.0.1-preview.14 127 1/28/2022
1.0.1-preview.13 133 1/27/2022