diff --git a/Build.ps1 b/Build.ps1
index 0515652..1178d7c 100644
--- a/Build.ps1
+++ b/Build.ps1
@@ -1,29 +1,35 @@
+Write-Output "build: Build started"
+
Push-Location $PSScriptRoot
-if(Test-Path .\artifacts) { Remove-Item .\artifacts -Force -Recurse }
+if(Test-Path .\artifacts) {
+ Write-Output "build: Cleaning .\artifacts"
+ Remove-Item .\artifacts -Force -Recurse
+}
-& dotnet restore --no-cache
+$branch = @{ $true = $env:APPVEYOR_REPO_BRANCH; $false = $(git symbolic-ref --short -q HEAD) }[$NULL -ne $env:APPVEYOR_REPO_BRANCH];
+$revision = @{ $true = "{0:00000}" -f [convert]::ToInt32("0" + $env:APPVEYOR_BUILD_NUMBER, 10); $false = "local" }[$NULL -ne $env:APPVEYOR_BUILD_NUMBER];
+$suffix = @{ $true = ""; $false = "$($branch.Substring(0, [math]::Min(10,$branch.Length)))-$revision"}[$branch -eq "main" -and $revision -ne "local"]
+$commitHash = $(git rev-parse --short HEAD)
+$buildSuffix = @{ $true = "$($suffix)-$($commitHash)"; $false = "$($branch)-$($commitHash)" }[$suffix -ne ""]
-$branch = @{ $true = $env:APPVEYOR_REPO_BRANCH; $false = $(git symbolic-ref --short -q HEAD) }[$env:APPVEYOR_REPO_BRANCH -ne $NULL];
-$revision = @{ $true = "{0:00000}" -f [convert]::ToInt32("0" + $env:APPVEYOR_BUILD_NUMBER, 10); $false = "local" }[$env:APPVEYOR_BUILD_NUMBER -ne $NULL];
-$suffix = @{ $true = ""; $false = "$branch-$revision"}[$branch -eq "master" -and $revision -ne "local"]
+Write-Output "build: Package version suffix is $suffix"
+Write-Output "build: Build version suffix is $buildSuffix"
-foreach ($src in ls src/Serilog.*) {
- Push-Location $src
+& dotnet build --configuration Release --version-suffix=$buildSuffix /p:ContinuousIntegrationBuild=true
- & dotnet pack -c Release -o ..\..\.\artifacts --version-suffix=$suffix
- if($LASTEXITCODE -ne 0) { exit 1 }
+if($LASTEXITCODE -ne 0) { throw 'build failed' }
- Pop-Location
+if($suffix) {
+ & dotnet pack src\Serilog.Formatting.Compact --configuration Release --no-build --no-restore -o artifacts --version-suffix=$suffix
+} else {
+ & dotnet pack src\Serilog.Formatting.Compact --configuration Release --no-build --no-restore -o artifacts
}
-foreach ($test in ls test/Serilog.*.Tests) {
- Push-Location $test
+if($LASTEXITCODE -ne 0) { throw 'pack failed' }
- & dotnet test -c Release
- if($LASTEXITCODE -ne 0) { exit 2 }
+Write-Output "build: Testing"
- Pop-Location
-}
+& dotnet test test\Serilog.Formatting.Compact.Tests --configuration Release --no-build --no-restore
-Pop-Location
+if($LASTEXITCODE -ne 0) { throw 'unit tests failed' }
diff --git a/CHANGES.md b/CHANGES.md
index e69de29..10983ba 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -0,0 +1,2 @@
+supported targets: netstandard2.0, net6.0
+updated packages in test proj
\ No newline at end of file
diff --git a/README.md b/README.md
index d291a49..730bd41 100644
--- a/README.md
+++ b/README.md
@@ -140,14 +140,15 @@ See `test/Serilog.Formatting.Compact.Tests/FormattingBenchmarks.cs`.
|:------------------------------ |----------: |---------: |------: |
| `JsonFormatter` | 11.2775 µs | 0.0682 µs | 1.00 |
| `CompactJsonFormatter` | 6.0315 µs | 0.0429 µs | 0.53 |
-| `RenderedJsonFormatter` | 13.7585 µs | 0.1194 µs | 1.22 |
+| `JsonFormatter(renderMessage: true)` | 13.7585 µs | 0.1194 µs | 1.22 |
| `RenderedCompactJsonFormatter` | 7.0680 µs | 0.0605 µs | 0.63 |
### Tools
Several tools are available for working with the CLEF format.
+ * **[_Analogy.LogViewer.Serilog_](https://github.com/Analogy-LogViewer/Analogy.LogViewer.Serilog)** - CLEF parser for [Analogy Log Viewer](https://github.com/Analogy-LogViewer/Analogy.LogViewer)
* **[`clef-tool`](https://github.com/datalust/clef-tool)** - a CLI application for processing CLEF files
- * **[Compact Log Format Viewer](https://github.com/warrenbuckley/Compact-Log-Format-Viewer)** - a cross-platform viewer for CLEF JSON files
- * **[_Serilog.Formatting.Compact.Reader_](https://github.com/serilog/serilog-formatting-compact-reader)** - convert CLEF JSON documents back into Serilog `LogEvent`s
-
+ * **[Compact Log Format Viewer](https://github.com/warrenbuckley/Compact-Log-Format-Viewer)** - a cross-platform viewer for CLEF files
+ * **[`seqcli`](https://github.com/datalust/seqcli)** - pretty-`print` CLEF files at the command-line, or `ingest` CLEF files into [Seq](https://datalust.co/seq) for search, and analysis
+ * **[_Serilog.Formatting.Compact.Reader_](https://github.com/serilog/serilog-formatting-compact-reader)** - convert CLEF documents back into Serilog `LogEvent`s
diff --git a/appveyor.yml b/appveyor.yml
index 699d563..b2e8553 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -1,18 +1,18 @@
version: '{build}'
skip_tags: true
-image: Visual Studio 2019
+image: Visual Studio 2022
configuration: Release
install:
- ps: ./Setup.ps1
build_script:
- ps: ./Build.ps1
-test: off
+test: false
artifacts:
- path: artifacts/Serilog.*.nupkg
deploy:
- provider: NuGet
api_key:
- secure: ptRAVPZZO/hlZUv5e/yLnHF7aAh8tQmBfvLt64Qrvhoe7I/mbbPNI6RYm92g5EzG
+ secure: 4nUKbHgmKmedr6dDtCT2uWVLeQl+tFqO+y9LvRi3nk7cvD/DnOYI1ZqajsgDqxnH
skip_symbols: true
on:
branch: /^(master|dev)$/
diff --git a/assets/serilog-extension-nuget.png b/assets/serilog-extension-nuget.png
new file mode 100644
index 0000000..1dfe430
Binary files /dev/null and b/assets/serilog-extension-nuget.png differ
diff --git a/global.json b/global.json
index 2223a05..8960f9e 100644
--- a/global.json
+++ b/global.json
@@ -1,5 +1,5 @@
{
"sdk": {
- "version": "3.0.100"
+ "version": "7.0.304"
}
}
\ No newline at end of file
diff --git a/src/Serilog.Formatting.Compact/Formatting/Compact/CompactJsonFormatter.cs b/src/Serilog.Formatting.Compact/Formatting/Compact/CompactJsonFormatter.cs
index e2ead70..992740c 100644
--- a/src/Serilog.Formatting.Compact/Formatting/Compact/CompactJsonFormatter.cs
+++ b/src/Serilog.Formatting.Compact/Formatting/Compact/CompactJsonFormatter.cs
@@ -13,11 +13,13 @@
// limitations under the License.
using System;
+using System.Globalization;
using System.IO;
using System.Linq;
using Serilog.Events;
using Serilog.Formatting.Json;
using Serilog.Parsing;
+// ReSharper disable MemberCanBePrivate.Global
namespace Serilog.Formatting.Compact
{
@@ -76,12 +78,12 @@ public static void FormatEvent(LogEvent logEvent, TextWriter output, JsonValueFo
{
output.Write(",\"@r\":[");
var delim = "";
- foreach (var r in tokensWithFormat)
+ foreach (PropertyToken r in tokensWithFormat)
{
output.Write(delim);
delim = ",";
var space = new StringWriter();
- r.Render(logEvent.Properties, space);
+ r.Render(logEvent.Properties, space, CultureInfo.InvariantCulture);
JsonValueFormatter.WriteQuotedJsonString(space.ToString(), output);
}
output.Write(']');
@@ -100,6 +102,20 @@ public static void FormatEvent(LogEvent logEvent, TextWriter output, JsonValueFo
JsonValueFormatter.WriteQuotedJsonString(logEvent.Exception.ToString(), output);
}
+ if (logEvent.TraceId != null)
+ {
+ output.Write(",\"@tr\":\"");
+ output.Write(logEvent.TraceId.Value.ToHexString());
+ output.Write('\"');
+ }
+
+ if (logEvent.SpanId != null)
+ {
+ output.Write(",\"@sp\":\"");
+ output.Write(logEvent.SpanId.Value.ToHexString());
+ output.Write('\"');
+ }
+
foreach (var property in logEvent.Properties)
{
var name = property.Key;
diff --git a/src/Serilog.Formatting.Compact/Formatting/Compact/RenderedCompactJsonFormatter.cs b/src/Serilog.Formatting.Compact/Formatting/Compact/RenderedCompactJsonFormatter.cs
index d76ecbf..fbe0dd2 100644
--- a/src/Serilog.Formatting.Compact/Formatting/Compact/RenderedCompactJsonFormatter.cs
+++ b/src/Serilog.Formatting.Compact/Formatting/Compact/RenderedCompactJsonFormatter.cs
@@ -13,9 +13,11 @@
// limitations under the License.
using System;
+using System.Globalization;
using System.IO;
using Serilog.Events;
using Serilog.Formatting.Json;
+// ReSharper disable MemberCanBePrivate.Global
namespace Serilog.Formatting.Compact
{
@@ -63,11 +65,11 @@ public static void FormatEvent(LogEvent logEvent, TextWriter output, JsonValueFo
output.Write("{\"@t\":\"");
output.Write(logEvent.Timestamp.UtcDateTime.ToString("O"));
output.Write("\",\"@m\":");
- var message = logEvent.MessageTemplate.Render(logEvent.Properties);
+ var message = logEvent.MessageTemplate.Render(logEvent.Properties, CultureInfo.InvariantCulture);
JsonValueFormatter.WriteQuotedJsonString(message, output);
output.Write(",\"@i\":\"");
var id = EventIdHash.Compute(logEvent.MessageTemplate.Text);
- output.Write(id.ToString("x8"));
+ output.Write(id.ToString("x8",CultureInfo.InvariantCulture));
output.Write('"');
if (logEvent.Level != LogEventLevel.Information)
@@ -82,7 +84,21 @@ public static void FormatEvent(LogEvent logEvent, TextWriter output, JsonValueFo
output.Write(",\"@x\":");
JsonValueFormatter.WriteQuotedJsonString(logEvent.Exception.ToString(), output);
}
+
+ if (logEvent.TraceId != null)
+ {
+ output.Write(",\"@tr\":\"");
+ output.Write(logEvent.TraceId.Value.ToHexString());
+ output.Write('\"');
+ }
+ if (logEvent.SpanId != null)
+ {
+ output.Write(",\"@sp\":\"");
+ output.Write(logEvent.SpanId.Value.ToHexString());
+ output.Write('\"');
+ }
+
foreach (var property in logEvent.Properties)
{
var name = property.Key;
diff --git a/src/Serilog.Formatting.Compact/Serilog.Formatting.Compact.csproj b/src/Serilog.Formatting.Compact/Serilog.Formatting.Compact.csproj
index 0d477cd..06def8b 100644
--- a/src/Serilog.Formatting.Compact/Serilog.Formatting.Compact.csproj
+++ b/src/Serilog.Formatting.Compact/Serilog.Formatting.Compact.csproj
@@ -1,30 +1,36 @@
-
- A simple, compact JSON-based event format for Serilog.
- 1.1.0
- Serilog Contributors
- net452;netstandard1.1;netstandard2.0
- true
- true
- Serilog.Formatting.Compact
- ../../assets/Serilog.snk
- true
- true
- Serilog.Formatting.Compact
- serilog;json
- http://serilog.net/images/serilog-extension-nuget.png
- https://github.com/serilog/serilog-formatting-compact
- Apache-2.0
-
+
+ A simple, compact JSON-based event format for Serilog.
+ 2.0.0
+ Serilog Contributors
+ net462;net471
+ $(TargetFrameworks);netstandard2.0;netstandard2.1;net6.0;net7.0
+ true
+ true
+ ../../assets/Serilog.snk
+ true
+ true
+ serilog-extension-nuget.png
+ serilog;json
+ https://github.com/serilog/serilog-formatting-compact
+ Apache-2.0
+ True
+ https://github.com/serilog/serilog-formatting-compact
+ git
+ 6.0-recommended
+ Serilog
+ README.md
+
-
-
-
+
+ 5
+
-
-
-
-
+
+
+
+
+
diff --git a/test/Serilog.Formatting.Compact.Tests/CompactJsonFormatterTests.cs b/test/Serilog.Formatting.Compact.Tests/CompactJsonFormatterTests.cs
index e5c06ba..bfc4371 100644
--- a/test/Serilog.Formatting.Compact.Tests/CompactJsonFormatterTests.cs
+++ b/test/Serilog.Formatting.Compact.Tests/CompactJsonFormatterTests.cs
@@ -1,7 +1,11 @@
using System;
+using System.Diagnostics;
+using System.Linq;
using Newtonsoft.Json.Linq;
+using Serilog.Events;
using Xunit;
using Serilog.Formatting.Compact.Tests.Support;
+using Serilog.Parsing;
namespace Serilog.Formatting.Compact.Tests
@@ -77,5 +81,18 @@ public void TimestampIsUtc()
Assert.True(jobject.TryGetValue("@t", out val));
Assert.EndsWith("Z", val.ToObject());
}
+
+ [Fact]
+ public void TraceAndSpanIdsGenerateValidJson()
+ {
+ var traceId = ActivityTraceId.CreateRandom();
+ var spanId = ActivitySpanId.CreateRandom();
+ var evt = new LogEvent(DateTimeOffset.Now, LogEventLevel.Information, null,
+ new MessageTemplate(Enumerable.Empty()), Enumerable.Empty(),
+ traceId, spanId);
+ var json = AssertValidJson(log => log.Write(evt));
+ Assert.Equal(traceId.ToHexString(), json["@tr"]);
+ Assert.Equal(spanId.ToHexString(), json["@sp"]);
+ }
}
}
diff --git a/test/Serilog.Formatting.Compact.Tests/FormattingBenchmarks.cs b/test/Serilog.Formatting.Compact.Tests/FormattingBenchmarks.cs
index fa2cc5c..b637c11 100644
--- a/test/Serilog.Formatting.Compact.Tests/FormattingBenchmarks.cs
+++ b/test/Serilog.Formatting.Compact.Tests/FormattingBenchmarks.cs
@@ -30,7 +30,7 @@ public FormattingBenchmarks()
StringWriter _buffer;
- [Setup]
+ [GlobalSetup]
public void InitBuffer()
{
_buffer = new StringWriter();
diff --git a/test/Serilog.Formatting.Compact.Tests/FormattingBenchmarksConfig.cs b/test/Serilog.Formatting.Compact.Tests/FormattingBenchmarksConfig.cs
index 33f0f7c..b0bcddd 100644
--- a/test/Serilog.Formatting.Compact.Tests/FormattingBenchmarksConfig.cs
+++ b/test/Serilog.Formatting.Compact.Tests/FormattingBenchmarksConfig.cs
@@ -7,7 +7,7 @@ public class FormattingBenchmarksConfig : ManualConfig
{
public FormattingBenchmarksConfig()
{
- this.Add(Job.Default.WithTargetCount(new Count(10)));
+ this.AddJob(Job.Default.WithIterationCount(10));
}
}
}
\ No newline at end of file
diff --git a/test/Serilog.Formatting.Compact.Tests/Serilog.Formatting.Compact.Tests.csproj b/test/Serilog.Formatting.Compact.Tests/Serilog.Formatting.Compact.Tests.csproj
index 594962b..6a3a324 100644
--- a/test/Serilog.Formatting.Compact.Tests/Serilog.Formatting.Compact.Tests.csproj
+++ b/test/Serilog.Formatting.Compact.Tests/Serilog.Formatting.Compact.Tests.csproj
@@ -1,30 +1,29 @@
-
+
-
- net452;netcoreapp2.1
- Serilog.Formatting.Compact.Tests
- ../../assets/Serilog.snk
- true
- true
- false
- true
-
+
+ net462;net48
+ $(TargetFrameworks);netcoreapp3.1;net6.0;net7.0;
+ Serilog.Formatting.Compact.Tests
+ ../../assets/Serilog.snk
+ true
+ true
+ false
+ true
+
-
-
-
-
-
-
-
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+