Skip to content

Commit 36e0efd

Browse files
authored
Merge pull request #74 from nanoframework/release-v1.0.0
release-v1.0.0
2 parents 61794ed + 963b4bf commit 36e0efd

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+1146
-424
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# Copyright (c) .NET Foundation and Contributors
2+
# See LICENSE file in the project root for full license information.
3+
4+
# This workflow will periodically check .NET nanoFramework dependencies and updates them in the repository it's running.
5+
6+
name: Daily update dependencies
7+
8+
on:
9+
schedule:
10+
# At 00:00 UTC every day.
11+
- cron: '00 00 * * *'
12+
repository_dispatch:
13+
types: update-dependencies
14+
15+
defaults:
16+
run:
17+
shell: pwsh
18+
19+
jobs:
20+
update-dotnet-preview:
21+
name: Update .NET nanoFramework dependencies
22+
timeout-minutes: 15
23+
runs-on: windows-latest
24+
steps:
25+
- name: Checkout
26+
uses: actions/checkout@v2
27+
with:
28+
path: main
29+
- name: Checkout tools repo
30+
uses: actions/checkout@v2
31+
with:
32+
repository: nanoframework/nf-tools
33+
path: tools
34+
- name: Update dependencies
35+
run: ./github-actions/update-nf-dependencies.ps1
36+
working-directory: tools
37+
- name: Create Pull Request
38+
uses: peter-evans/create-pull-request@v3
39+
if: env.CREATE_PR == 'true'
40+
with:
41+
title: '${{ env.PR_TITLE }}'
42+
body: |
43+
${{ env.PR_MESSAGE }}
44+
45+
[version update]
46+
47+
### :warning: This is an automated update. :warning:
48+
committer: 'nfbot <[email protected]>'
49+
branch: ${{ env.BRANCH_NAME }}
50+
path: main
51+
labels: |
52+
Type: dependencies

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,3 +255,9 @@ paket-files/
255255

256256
#SoundCloud
257257
*.sonarqube/
258+
259+
#VS Code
260+
.vscode
261+
262+
#Sonar Lint
263+
.sonarlint

CHANGELOG.md

Lines changed: 486 additions & 0 deletions
Large diffs are not rendered by default.

CODE_OF_CONDUCT.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
# Contributor Code of Conduct
22

3-
Please refer to the contributor Code of Conduct at the Home repository [here](https://github.com/nanoframework/Home/blob/master/CODE_OF_CONDUCT.md.
3+
Please refer to the contributor Code of Conduct at the Home repository [here](https://github.com/nanoframework/Home/blob/main/CODE_OF_CONDUCT.md.

CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
# Contributing to **nanoFramework**
22

3-
Please refer to the contribution guidelines at the Home repository [here](https://github.com/nanoframework/Home/blob/master/CONTRIBUTING.md).
3+
Please refer to the contribution guidelines at the Home repository [here](https://github.com/nanoframework/Home/blob/main/CONTRIBUTING.md).

README.md

Lines changed: 75 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
1-
[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=nanoframework_nanoFramework.nanoFramework.Logging&metric=alert_status)](https://sonarcloud.io/dashboard?id=nanoframework_nanoFramework.nanoFramework.Logging) [![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=nanoframework_nanoFramework.nanoFramework.Logging&metric=reliability_rating)](https://sonarcloud.io/dashboard?id=nanoframework_nanoFramework.nanoFramework.Logging) [![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) [![NuGet](https://img.shields.io/nuget/dt/nanoFramework.nanoFramework.Logging.svg?label=NuGet&style=flat&logo=nuget)](https://www.nuget.org/packages/nanoFramework.nanoFramework.Logging/) [![#yourfirstpr](https://img.shields.io/badge/first--timers--only-friendly-blue.svg)](https://github.com/nanoframework/Home/blob/master/CONTRIBUTING.md) [![Discord](https://img.shields.io/discord/478725473862549535.svg?logo=discord&logoColor=white&label=Discord&color=7289DA)](https://discord.gg/gCyBu8T)
1+
[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=nanoframework_nanoFramework.Logging&metric=alert_status)](https://sonarcloud.io/dashboard?id=nanoframework_nanoFramework.Logging) [![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=nanoframework_nanoFramework.Logging&metric=reliability_rating)](https://sonarcloud.io/dashboard?id=nanoframework_nanoFramework.Logging) [![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) [![NuGet](https://img.shields.io/nuget/dt/nanoFramework.Logging.svg?label=NuGet&style=flat&logo=nuget)](https://www.nuget.org/packages/nanoFramework.Logging/) [![#yourfirstpr](https://img.shields.io/badge/first--timers--only-friendly-blue.svg)](https://github.com/nanoframework/Home/blob/main/CONTRIBUTING.md) [![Discord](https://img.shields.io/discord/478725473862549535.svg?logo=discord&logoColor=white&label=Discord&color=7289DA)](https://discord.gg/gCyBu8T)
22

3-
![nanoFramework logo](https://github.com/nanoframework/Home/blob/master/resources/logo/nanoFramework-repo-logo.png)
3+
![nanoFramework logo](https://raw.githubusercontent.com/nanoframework/Home/main/resources/logo/nanoFramework-repo-logo.png)
44

55
-----
66

7-
### Welcome to the **nanoFramework** nanoFramework.Logging Library repository!
7+
### Welcome to the .NET **nanoFramework** nanoFramework.Logging Library repository
88

99
## Build status
1010

1111
| Component | Build Status | NuGet Package |
1212
|:-|---|---|
13-
| nanoFramework.Logging | [![Build Status](https://dev.azure.com/nanoframework/nanoFramework.nanoFramework.Logging/_apis/build/status/nanoframework.nanoFramework.nanoFramework.Logging?branchName=master)](https://dev.azure.com/nanoframework/nanoFramework.nanoFramework.Logging/_build/latest?definitionId=12?branchName=master) | [![NuGet](https://img.shields.io/nuget/v/nanoFramework.nanoFramework.Logging.svg?label=NuGet&style=flat&logo=nuget)](https://www.nuget.org/packages/nanoFramework.nanoFramework.Logging/) |
14-
| nanoFramework.Logging (preview) | [![Build Status](https://dev.azure.com/nanoframework/nanoFramework.nanoFramework.Logging/_apis/build/status/nanoframework.nanoFramework.nanoFramework.Logging?branchName=develop)](https://dev.azure.com/nanoframework/nanoFramework.nanoFramework.Logging/_build/latest?definitionId=12?branchName=develop) | [![](https://badgen.net/badge/NuGet/preview/D7B023?icon=https://simpleicons.now.sh/azuredevops/fff)](https://dev.azure.com/nanoframework/feed/_packaging?_a=package&feed=sandbox&package=nanoFramework.nanoFramework.Logging&protocolType=NuGet&view=overview) |
15-
| nanoFramework.Logging.Serial | [![Build Status](https://dev.azure.com/nanoframework/nanoFramework.nanoFramework.Logging/_apis/build/status/nanoframework.nanoFramework.nanoFramework.Logging?branchName=master)](https://dev.azure.com/nanoframework/nanoFramework.nanoFramework.Logging/_build/latest?definitionId=12?branchName=master) | [![NuGet](https://img.shields.io/nuget/v/nanoFramework.nanoFramework.Logging.Serial.svg?label=NuGet&style=flat&logo=nuget)](https://www.nuget.org/packages/nanoFramework.nanoFramework.Logging.Serial/) |
16-
| nanoFramework.Logging.Serial (preview) | [![Build Status](https://dev.azure.com/nanoframework/nanoFramework.nanoFramework.Logging/_apis/build/status/nanoframework.nanoFramework.nanoFramework.Logging?branchName=develop)](https://dev.azure.com/nanoframework/nanoFramework.nanoFramework.Logging/_build/latest?definitionId=12?branchName=develop) | [![](https://badgen.net/badge/NuGet/preview/D7B023?icon=https://simpleicons.now.sh/azuredevops/fff)](https://dev.azure.com/nanoframework/feed/_packaging?_a=package&feed=sandbox&package=nanoFramework.nanoFramework.Logging.Serial&protocolType=NuGet&view=overview) |
17-
| nanoFramework.Logging.Stream | [![Build Status](https://dev.azure.com/nanoframework/nanoFramework.nanoFramework.Logging/_apis/build/status/nanoframework.nanoFramework.nanoFramework.Logging?branchName=master)](https://dev.azure.com/nanoframework/nanoFramework.nanoFramework.Logging/_build/latest?definitionId=12?branchName=master) | [![NuGet](https://img.shields.io/nuget/v/nanoFramework.nanoFramework.Logging.Stream.svg?label=NuGet&style=flat&logo=nuget)](https://www.nuget.org/packages/nanoFramework.nanoFramework.Logging.Stream/) |
18-
| nanoFramework.Logging.Stream (preview) | [![Build Status](https://dev.azure.com/nanoframework/nanoFramework.nanoFramework.Logging/_apis/build/status/nanoframework.nanoFramework.nanoFramework.Logging?branchName=develop)](https://dev.azure.com/nanoframework/nanoFramework.nanoFramework.Logging/_build/latest?definitionId=12?branchName=develop) | [![](https://badgen.net/badge/NuGet/preview/D7B023?icon=https://simpleicons.now.sh/azuredevops/fff)](https://dev.azure.com/nanoframework/feed/_packaging?_a=package&feed=sandbox&package=nanoFramework.nanoFramework.Logging.Stream&protocolType=NuGet&view=overview) |
13+
| nanoFramework.Logging | [![Build Status](https://dev.azure.com/nanoframework/nanoframework.Logging/_apis/build/status/nanoframework.nanoFramework.Logging?branchName=main)](https://dev.azure.com/nanoframework/nanoframework.Logging/_build/latest?definitionId=71&branchName=main) | [![NuGet](https://img.shields.io/nuget/v/nanoFramework.Logging.svg?label=NuGet&style=flat&logo=nuget)](https://www.nuget.org/packages/nanoFramework.Logging/) |
14+
| nanoFramework.Logging (preview) | [![Build Status](https://dev.azure.com/nanoframework/nanoframework.Logging/_apis/build/status/nanoframework.nanoFramework.Logging?branchName=develop)](https://dev.azure.com/nanoframework/nanoframework.Logging/_build/latest?definitionId=71&branchName=develop) | [![NuGet](https://img.shields.io/nuget/vpre/nanoFramework.Logging.svg?label=NuGet&style=flat&logo=nuget)](https://www.nuget.org/packages/nanoFramework.Logging/) |
15+
| nanoFramework.Logging.Serial | [![Build Status](https://dev.azure.com/nanoframework/nanoframework.Logging/_apis/build/status/nanoframework.nanoFramework.Logging?branchName=main)](https://dev.azure.com/nanoframework/nanoframework.Logging/_build/latest?definitionId=71&branchName=main) | [![NuGet](https://img.shields.io/nuget/v/nanoFramework.Logging.Serial.svg?label=NuGet&style=flat&logo=nuget)](https://www.nuget.org/packages/nanoFramework.Logging.Serial/) |
16+
| nanoFramework.Logging.Serial (preview) | [![Build Status](https://dev.azure.com/nanoframework/nanoframework.Logging/_apis/build/status/nanoframework.nanoFramework.Logging?branchName=develop)](https://dev.azure.com/nanoframework/nanoframework.Logging/_build/latest?definitionId=71&branchName=develop) | [![NuGet](https://img.shields.io/nuget/vpre/nanoFramework.Logging.Serial.svg?label=NuGet&style=flat&logo=nuget)](https://www.nuget.org/packages/nanoFramework.Logging.Serial/) |
17+
| nanoFramework.Logging.Stream | [![Build Status](https://dev.azure.com/nanoframework/nanoframework.Logging/_apis/build/status/nanoframework.nanoFramework.Logging?branchName=main)](https://dev.azure.com/nanoframework/nanoframework.Logging/_build/latest?definitionId=71&branchName=main) | [![NuGet](https://img.shields.io/nuget/v/nanoFramework.Logging.Stream.svg?label=NuGet&style=flat&logo=nuget)](https://www.nuget.org/packages/nanoFramework.Logging.Stream/) |
18+
| nanoFramework.Logging.Stream (preview) | [![Build Status](https://dev.azure.com/nanoframework/nanoframework.Logging/_apis/build/status/nanoframework.nanoFramework.Logging?branchName=develop)](https://dev.azure.com/nanoframework/nanoframework.Logging/_build/latest?definitionId=71&branchName=develop) | [![NuGet](https://img.shields.io/nuget/vpre/nanoFramework.Logging.Stream.svg?label=NuGet&style=flat&logo=nuget)](https://www.nuget.org/packages/nanoFramework.Logging.Stream/) |
1919

2020

2121
## Feedback and documentation
@@ -26,7 +26,7 @@ Join our Discord community [here](https://discord.gg/gCyBu8T).
2626

2727
## Credits
2828

29-
The list of contributors to this project can be found at [CONTRIBUTORS](https://github.com/nanoframework/Home/blob/master/CONTRIBUTORS.md).
29+
The list of contributors to this project can be found at [CONTRIBUTORS](https://github.com/nanoframework/Home/blob/main/CONTRIBUTORS.md).
3030

3131
## License
3232

@@ -109,8 +109,8 @@ Note that you can adjust the baud speed and all other elements.
109109
Or directly using a SerialLogger:
110110

111111
```csharp
112-
SerialDevice _serial;
113-
_serial = SerialDevice.FromId("COM6", 115200);
112+
SerialPort _serial;
113+
_serial = new SerialPort("COM6", 115200);
114114
SerialLogger _logger = new SerialLogger(ref _serial);
115115
_logger.MinLogLevel = LogLevel.Trace;
116116
_logger.LogTrace("This is a trace");
@@ -174,9 +174,71 @@ _logger.LogTrace("This won't be displayed, only critical will be");
174174
_logger.LogCritical("Critical message will be displayed");
175175
```
176176

177+
### Create your own formatting
178+
179+
You can use a custom formatter which will give you the name of the logger, the log level, the event ID, the message itself and a potential exception. The function definition should follow the following pattern:
180+
181+
```csharp
182+
public interface IMessageFormatter
183+
{
184+
string MessageFormatter(string className, LogLevel logLevel, EventId eventId, string state, Exception exception);
185+
}
186+
```
187+
188+
**Important**: this function will be called directly, without instantiating the class it is part of. So make sure either this function is a static, either it's part of the class using the logger. The static option always works. The interface is given for convenience and to give the format.
189+
190+
To setup the formatting, just use the following line. The type of the class containing the function and the exact name of the function are required.
191+
192+
```csharp
193+
LoggerExtensions.MessageFormatter = typeof(MyFormatter).GetType().GetMethod("MessageFormatterStatic");
194+
195+
public class MyFormatter
196+
{
197+
public string MessageFormatterStatic(string className, LogLevel logLevel, EventId eventId, string state, Exception exception)
198+
{
199+
string logstr = string.Empty;
200+
switch (logLevel)
201+
{
202+
case LogLevel.Trace:
203+
logstr = "TRACE: ";
204+
break;
205+
case LogLevel.Debug:
206+
logstr = "I love debug: ";
207+
break;
208+
case LogLevel.Warning:
209+
logstr = "WARNING: ";
210+
break;
211+
case LogLevel.Error:
212+
logstr = "ERROR: ";
213+
break;
214+
case LogLevel.Critical:
215+
logstr = "CRITICAL:";
216+
break;
217+
case LogLevel.None:
218+
case LogLevel.Information:
219+
default:
220+
break;
221+
}
222+
223+
string eventstr = eventId.Id != 0 ? $" Event ID: {eventId}, " : string.Empty;
224+
string msg = $"[{className}] {eventstr}{logstr} {state}";
225+
if (exception != null)
226+
{
227+
msg += $" {exception}";
228+
}
229+
230+
return msg;
231+
}
232+
}
233+
```
234+
235+
You are free to use anything you'd like and format as you like the message.
236+
237+
Note: It is **not** necessary to add a \r\n at the end, this is done by each logger.
238+
177239
## Code of Conduct
178240

179-
This project has adopted the code of conduct defined by the Contributor Covenant to clarify expected behavior in our community.
241+
This project has adopted the code of conduct defined by the Contributor Covenant to clarify expected behaviour in our community.
180242
For more information see the [.NET Foundation Code of Conduct](https://dotnetfoundation.org/code-of-conduct).
181243

182244
### .NET Foundation
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
using nanoFramework.TestFramework;
2+
using System;
3+
using System.Diagnostics;
4+
using nanoFramework.Logging;
5+
using Microsoft.Extensions.Logging;
6+
using nanoFramework.Logging.Debug;
7+
8+
namespace UnitTestDebugLogging
9+
{
10+
[TestClass]
11+
class FormattingTest
12+
{
13+
static DebugLogger _logger;
14+
15+
[Setup]
16+
public void SteupFormattingTest()
17+
{
18+
_logger = new DebugLogger(nameof(FormattingTest));
19+
LoggerExtensions.MessageFormatter = typeof(MyFormatter).GetType().GetMethod("MessageFormatterStatic");
20+
Debug.WriteLine($"{LoggerExtensions.MessageFormatter.Name}");
21+
_logger.MinLogLevel = LogLevel.Trace;
22+
}
23+
24+
[TestMethod]
25+
public void TestInvoke()
26+
{
27+
string msg = (string)LoggerExtensions.MessageFormatter.Invoke(null, new object[] { "test", LogLevel.Trace, new EventId(0), "some text", null });
28+
Debug.WriteLine(msg);
29+
}
30+
31+
[TestMethod]
32+
public void TestFormatting()
33+
{
34+
LogAll();
35+
}
36+
37+
[TestMethod]
38+
public void TestFormattingSimple()
39+
{
40+
LoggerExtensions.MessageFormatter = typeof(MyFormatter).GetType().GetMethod("MessageFormatterSimple");
41+
LogAll();
42+
}
43+
44+
private void LogAll()
45+
{
46+
Debug.WriteLine($"Expexcted level: {_logger.MinLogLevel}");
47+
_logger.LogTrace("{0} {1}", new object[] { "param 1", 42 });
48+
_logger.LogDebug("{0} {1}", new object[] { "param 1", 42 });
49+
_logger.LogInformation("Just some information and nothing else");
50+
_logger.LogWarning("{0} {1}", new object[] { "param 1", 42 });
51+
_logger.LogError(new Exception("Big problem"), "{0} {1}", new object[] { "param 1", 42 });
52+
_logger.LogCritical(42, new Exception("Insane problem"), "{0} {1}", new object[] { "param 1", 42 });
53+
}
54+
55+
[Cleanup]
56+
public void CleanupFormattingTest()
57+
{
58+
LoggerExtensions.MessageFormatter = null;
59+
}
60+
}
61+
62+
public class MyFormatter : IMessageFormatter
63+
{
64+
public string MessageFormatter(string className, LogLevel logLevel, EventId eventId, string state, Exception exception)
65+
=> MessageFormatterStatic(className, logLevel, eventId, state, exception);
66+
67+
public string MessageFormatterStatic(string className, LogLevel logLevel, EventId eventId, string state, Exception exception)
68+
{
69+
string logstr = string.Empty;
70+
switch (logLevel)
71+
{
72+
case LogLevel.Trace:
73+
logstr = "TRACE: ";
74+
break;
75+
case LogLevel.Debug:
76+
logstr = "I love debug: ";
77+
break;
78+
case LogLevel.Warning:
79+
logstr = "WARNING: ";
80+
break;
81+
case LogLevel.Error:
82+
logstr = "ERROR: ";
83+
break;
84+
case LogLevel.Critical:
85+
logstr = "CRITICAL:";
86+
break;
87+
case LogLevel.None:
88+
case LogLevel.Information:
89+
default:
90+
break;
91+
}
92+
93+
string eventstr = eventId.Id != 0 ? $" Event ID: {eventId}, " : string.Empty;
94+
string msg = $"[{className}] {eventstr}{logstr} {state}";
95+
if (exception != null)
96+
{
97+
msg += $" {exception}";
98+
}
99+
100+
return msg;
101+
}
102+
103+
public string MessageFormatterSimple(string className, LogLevel logLevel, EventId eventId, string state, Exception exception)
104+
{
105+
string msg = $"[{className}] {logLevel}-{state}";
106+
if (exception != null)
107+
{
108+
msg += $" {exception}";
109+
}
110+
111+
return msg;
112+
}
113+
}
114+
}

Tests/UnitTestDebugLogging/MemoryStreamTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public void TestStreamFile()
2727
memoryStream.Read(fsContent, 0, fsContent.Length);
2828
var fsText = Encoding.UTF8.GetString(fsContent, 0, fsContent.Length);
2929
Assert.StartsWith("An informative message", fsText);
30-
Assert.EndsWith("With exception context System.Exception: Something is not supported", fsText);
30+
Assert.EndsWith("With exception context System.Exception: Something is not supported\r\n", fsText);
3131
}
3232

3333
[Cleanup]

Tests/UnitTestDebugLogging/MyTestComponent.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ namespace UnitTestDebugLogging
1111
{
1212
internal class MyTestComponent
1313
{
14-
private ILogger _logger;
14+
private readonly ILogger _logger;
1515

1616
public MyTestComponent()
1717
{

0 commit comments

Comments
 (0)