Skip to content

Commit

Permalink
Merge pull request #64 from alexinea/master
Browse files Browse the repository at this point in the history
 Fixed: Cosmos.Logging.Args contained parameters that were not processed by the renderer.
  • Loading branch information
alexinea authored Nov 27, 2019
2 parents c39d423 + 054d89c commit 016b4a4
Show file tree
Hide file tree
Showing 15 changed files with 137 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Alexinea.EntityFrameworkCore.LoggingExposure" Version="2.2.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.2.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.2.6" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="2.2.4" />
</ItemGroup>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,6 @@
<ProjectReference Include="..\Cosmos.Logging.Extensions.Exceptions\Cosmos.Logging.Extensions.Exceptions.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="MySqlConnector" Version="0.61.0" />
<PackageReference Include="MySqlConnector" Version="0.62.0-beta4" />
</ItemGroup>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,6 @@
<ProjectReference Include="..\Cosmos.Logging\Cosmos.Logging.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="FreeSql" Version="0.9.16" />
<PackageReference Include="FreeSql" Version="0.12.5" />
</ItemGroup>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Alexinea.Autofac.Extensions.DependencyInjection" Version="4.2.0" />
<PackageReference Include="Autofac" Version="4.8.1" />
<PackageReference Include="Autofac" Version="4.9.4" />
</ItemGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="Microsoft.AspNet.Mvc" Version="5.2.6" />
<PackageReference Include="Microsoft.AspNet.Mvc" Version="5.2.7" />
</ItemGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,6 @@
<ProjectReference Include="..\Cosmos.Logging\Cosmos.Logging.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="ZKWeb" Version="2.2.1" />
<PackageReference Include="ZKWeb" Version="3.0.0" />
</ItemGroup>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,6 @@
<ProjectReference Include="..\Cosmos.Logging\Cosmos.Logging.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="NLog" Version="4.6.7" />
<PackageReference Include="NLog" Version="4.6.8" />
</ItemGroup>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

<ItemGroup>
<PackageReference Include="Cosmos.Encryption" Version="0.1.1-alpha6-123080" />
<PackageReference Include="Google.Protobuf" Version="3.7.0" />
<PackageReference Include="ServiceStack.ProtoBuf" Version="5.5.0" />
<PackageReference Include="Google.Protobuf" Version="3.11.0-rc2" />
<PackageReference Include="ServiceStack.ProtoBuf" Version="5.7.0" />
</ItemGroup>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@

<ItemGroup>
<PackageReference Include="Cosmos.Encryption" Version="0.1.1-alpha6-123080" />
<PackageReference Include="Google.Protobuf" Version="3.7.0" />
<PackageReference Include="ServiceStack.ProtoBuf" Version="5.5.0" />
<PackageReference Include="Google.Protobuf" Version="3.11.0-rc2" />
<PackageReference Include="ServiceStack.ProtoBuf" Version="5.7.0" />
<PackageReference Include="TomatoLog.Client" Version="1.2.0" />
<PackageReference Include="TomatoLog.Client.Redis" Version="1.2.0" />
<PackageReference Include="TomatoLog.Client.RabbitMQ" Version="1.2.0" />
Expand Down
14 changes: 11 additions & 3 deletions src/Cosmos.Logging/Args.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,18 @@
namespace Cosmos.Logging {
public class Args {
namespace Cosmos.Logging
{
public class Args
{
private object[] _args;
public Args(params object[] args) => _args = args;

public static explicit operator object[](Args args) {
public static explicit operator object[](Args args)
{
return args._args;
}

public override string ToString()
{
return Newtonsoft.Json.JsonConvert.SerializeObject(_args);
}
}
}
46 changes: 46 additions & 0 deletions src/Cosmos.Logging/Core/ArgsHelper.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
using System.Collections.Generic;
using System.Linq;

namespace Cosmos.Logging.Core
{
internal static class ArgsHelper
{
public static object[] CleanUp(object[] messageTemplateParameters)
{
if (messageTemplateParameters == null)
return null;

var ret = new List<object>();
var lazy = new List<object>();

foreach (var parameter in messageTemplateParameters)
{
if (parameter is Args args)
{
var realArgs = CleanUp((object[]) args);

if (realArgs.Length == 0)
continue;

if (realArgs.Length == 1)
{
ret.Add(realArgs[0]);
}
else
{
ret.Add(realArgs[0]);

for (var i = 1; i < realArgs.Length; i++)
lazy.Add(realArgs[i]);
}
}
else
{
ret.Add(parameter);
}
}

return ret.Concat(lazy).ToArray();
}
}
}
4 changes: 2 additions & 2 deletions src/Cosmos.Logging/Cosmos.Logging.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
<ItemGroup>
<PackageReference Include="AspectCore.Core" Version="1.3.0" />
<PackageReference Include="AspectCore.Extensions.Reflection" Version="1.3.0" />
<PackageReference Include="Enums.NET" Version="2.3.2" />
<PackageReference Include="System.Collections.Immutable" Version="1.6.0-rc1.19456.4" />
<PackageReference Include="Enums.NET" Version="3.0.1" />
<PackageReference Include="System.Collections.Immutable" Version="1.7.0-preview3.19551.4" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)'=='netstandard2.0'">
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.2.0" />
Expand Down
5 changes: 3 additions & 2 deletions src/Cosmos.Logging/LoggerBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,11 @@ public void Write(LogEventId eventId, LogEventLevel level, Exception exception,
LogEventContext context = null, params object[] messageTemplateParameters) {
if (!IsEnabled(level)) return;
if (string.IsNullOrWhiteSpace(messageTemplate)) return;
var cleanMessageTemplateParameters = ArgsHelper.CleanUp(messageTemplateParameters);
if (IsManuallySendMode(sendMode)) {
ParseAndInsertLogEvenDescriptorManually(eventId ?? new LogEventId(), level, exception, messageTemplate, callerInfo, context, messageTemplateParameters);
ParseAndInsertLogEvenDescriptorManually(eventId ?? new LogEventId(), level, exception, messageTemplate, callerInfo, context, cleanMessageTemplateParameters);
} else {
ParseAndInsertLogEventIntoQueueAutomatically(eventId ?? new LogEventId(), level, exception, messageTemplate, callerInfo, context, messageTemplateParameters);
ParseAndInsertLogEventIntoQueueAutomatically(eventId ?? new LogEventId(), level, exception, messageTemplate, callerInfo, context, cleanMessageTemplateParameters);
}
}

Expand Down
75 changes: 63 additions & 12 deletions tests/Cosmos.Logging.MessageTemplateTokenTests/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,24 @@
using Cosmos.Logging.Sinks.SampleLogSink;
using Microsoft.Extensions.Configuration;

namespace Cosmos.Loggings.MessageTemplateTokenTests {
class Program {
namespace Cosmos.Loggings.MessageTemplateTokenTests
{
class Program
{

static void Preheater(MessageTemplateCachePreheater preheater) {
static void Preheater(MessageTemplateCachePreheater preheater)
{
preheater.Add("token test: {@Hello}, {0}, {@World}");
preheater.Add("token test: {@Hello}, {0}, {@World}1");
preheater.Add("token test: {@Hello:U}, {0:U}, {@World},{1}, {$ConsoleHelloWorld}, {$Hello}, {@Alewix}, {3}");
}

static object SyncLock = new object();

static void Main(string[] args) {
try {
static void Main(string[] args)
{
try
{
var root = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", true, true).Build();

Expand Down Expand Up @@ -138,17 +143,63 @@ static void Main(string[] args) {
// logger.LogInformation("position test{10:w}");
// logger.LogInformation("position test{10:w:} ");

logger.LogInformation("{$Date::yyyy年MM月dd日} token test: {@Hello:U}, {0:U}, {@World},{1}, {$ConsoleHelloWorld}, {$Hello}, {@Alewix}, {3}",
new Args(new {Hello = "_hello_"}, "?world?"));
logger.LogInformation("token test: {@Hello}, {0}, {@World}?????", new Args(new {Hello = "_hello_", World = "_world_"}, "?world?"));
// logger.LogInformation("{$Date::yyyy年MM月dd日} token test: {@Hello:U}, {0:U}, {@World},{1}, {$ConsoleHelloWorld}, {$Hello}, {@Alewix}, {3}",
// new Args(new {Hello = "_hello_"}, "?world?"));
logger.LogInformation(@"
{{多字段匿名对象测试1:基于 Cosmos.Logging.Args 的测试}}
Hello: {@Hello},
World: {@World},
0: {0},
1: {1},
2: {2},
Hello: {@Hello},
World: {@World}",
new Args(new {Hello = "_hello_", World = "_world_"}, "?world?"), arg2: "_position_1_");

using (var scope = logger.BeginScope("123")) {
logger.LogInformation("token test: {@Hello}, {0}, {@World}");
}
logger.LogInformation(@"
{{多字段匿名对象测试2:基于普通匿名对象的测试}}
Hello: {@Hello},
World: {@World},
0: {0},
1: {1},
2: {2},
Hello: {@Hello},
World: {@World}",
new {Hello = "_hello_"}, "?world?", new {World = "_world_"});

logger.LogInformation(@"
{{多字段匿名对象测试3:基于匿名类包含 Cosmos.Logging.Args 的测试}}
Hello: {@Hello},
World: {@World},
0: {0},
1: {1},
2: {2},
3: {3},
Hello: {@Hello},
World: {@World}",
new Args(new {Hello = "_hello_", _ = new Args(new {World = "_world_"})}, "?world?"), arg2: "_position_1_");

logger.LogInformation(@"
{{多字段匿名对象测试4:基于嵌套了 Cosmos.Logging.Args 的测试}}
Hello: {@Hello},
World: {@World},
0: {0},
1: {1},
2: {2},
3: {3},
4: {4},
Hello: {@Hello},
World: {@World}",
new Args(new {Hello = "_hello_", _ = new Args(new {__World = "_world_"})}, "?world?", new Args(new {World = "_world_"})), arg2: "_position_1_");

// using (var scope = logger.BeginScope("123")) {
// logger.LogInformation("token test: {@Hello}, {0}, {@World}");
// }

Console.WriteLine("I'm live");
}
catch (Exception e) {
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.WriteLine(e.Source);

Expand Down
1 change: 1 addition & 0 deletions tests/Cosmos.Logging.SampleSinkTests/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ static void Main(string[] args) {
var logger = LOGGER.GetLogger<Program>(mode: LogEventSendMode.Manually);

logger.LogInformation("hello");
logger.LogInformation("hello {0},number={1}", new {A = "1"}, 2);
logger.LogError("world", ctx => ctx.SetTags("Alex").SetTags("Lewis"));
logger.LogError("Nice {@L}", ctx => ctx.SetParameter(new {L = "KK"}));
logger.SubmitLogger();
Expand Down

0 comments on commit 016b4a4

Please sign in to comment.