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
<PackageReference Include="nanoFramework.Logging.Syslog" Version="1.1.108" />
paket add nanoFramework.Logging.Syslog --version 1.1.108
#r "nuget: nanoFramework.Logging.Syslog, 1.1.108"
// 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
欢迎使用 .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 的示例。
流日志记录器
与其他类似,您可以使用 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 是兼容的。 |
-
- nanoFramework.CoreLibrary (>= 1.15.5)
- nanoFramework.Logging (>= 1.1.108)
- nanoFramework.Runtime.Events (>= 1.11.18)
- nanoFramework.System.IO.Streams (>= 1.1.59)
- nanoFramework.System.Net (>= 1.11.1)
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 |