Skip to content

Commit 9be586c

Browse files
Merge pull request #72 from AkkaNetContrib/dev
v1.4.5 Release
2 parents e0253cb + 2dc585c commit 9be586c

9 files changed

+88
-54
lines changed

README.md

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,17 @@ This is the NLog integration plugin for Akka.NET.
88
### Configuration via code
99
```C#
1010
// Step 1. Create configuration object
11-
var config = new LoggingConfiguration();
11+
var config = new NLog.Config.LoggingConfiguration();
1212

13-
// Step 2. Create targets and add them to the configuration
14-
var consoleTarget = new ColoredConsoleTarget();
15-
config.AddTarget("console", consoleTarget);
13+
// Step 2. Create targets and configure properties
14+
var logconsole = new NLog.Targets.ConsoleTarget("logconsole");
15+
logconsole.Layout = @"${date:format=HH\:mm\:ss} ${level} ${logger} ${message}";
1616

17-
// Step 3. Set target properties
18-
consoleTarget.Layout = @"${date:format=HH\:mm\:ss} ${logger} ${message}";
19-
20-
// Step 4. Define rules
21-
var rule1 = new LoggingRule("*", LogLevel.Debug, consoleTarget);
22-
config.LoggingRules.Add(rule1);
23-
24-
// Step 5. Activate the configuration
25-
LogManager.Configuration = config;
17+
// Step 3. Define filtering rules
18+
config.AddRule(LogLevel.Debug, LogLevel.Fatal, logconsole);
19+
20+
// Step 4. Activate the configuration
21+
NLog.LogManager.Configuration = config;
2622

2723
Config myConfig = @"akka.loglevel = DEBUG
2824
akka.loggers=[""Akka.Logger.NLog.NLogLogger, Akka.Logger.NLog""]";
@@ -36,7 +32,7 @@ Add NLog.config file to your project
3632
<?xml version="1.0" encoding="utf-8" ?>
3733
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
3834
<targets>
39-
<target name="console" xsi:type="Console" layout="[${logger}] [${level:uppercase=true}] : ${message}"/>
35+
<target name="console" xsi:type="Console" layout="[${logger}] [${level:uppercase=true}] [${event-properties:item=logSource}] [${event-properties:item=actorPath}] [${event-properties:item=threadId:format=D4}] : ${message}"/>
4036
</targets>
4137
<rules>
4238
<logger name="*" minlevel="Debug" writeTo="console"/>

RELEASE_NOTES.md

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,18 @@
1-
#### 1.3.5 Januari 12 2020 ####
1+
#### 1.4.5 May 4 2020 ####
2+
3+
- Update Akka to 1.4.5
4+
- Update NLog to 4.7.0
5+
6+
#### 1.4.2 March 14 2020 ####
7+
8+
Updated to Akka 1.4.2
9+
Changed TargetFramework to NetStandard2.0
10+
11+
#### 1.3.5 January 28 2020 ####
212

313
Changed TargetFramework from net462 to net452
414

5-
#### 1.3.4 Januari 12 2020 ####
15+
#### 1.3.4 January 12 2020 ####
616

717
Update to Akka 1.3.17
818
Update to NLog 4.5.11
@@ -27,7 +37,7 @@ Support for Akka 1.3.0 and .NET Core
2737
Support for Akka 1.2.0
2838
Updated to NLog 4.4.6
2939

30-
#### 1.1.3 Januari 26 2017 ####
40+
#### 1.1.3 January 26 2017 ####
3141

3242
Support for Akka 1.1.3
3343
Updated to NLog 4.3.2

build-system/windows-pr-validation.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@ jobs:
1717
- template: azure-pipeline.template.yaml
1818
parameters:
1919
name: Windows
20-
vmImage: 'vs2017-win2016'
20+
vmImage: 'windows-2019'
2121
scriptFileName: build.cmd
2222
scriptArgs: all

src/Akka.Logger.NLog.Tests/Akka.Logger.NLog.Tests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(TestSdkVersion)" />
99
<PackageReference Include="xunit.runner.visualstudio" Version="$(XunitVersion)" />
1010
<PackageReference Include="xunit" Version="$(XunitVersion)" />
11-
<PackageReference Include="Akka.TestKit.Xunit2" Version="1.3.17" />
11+
<PackageReference Include="Akka.TestKit.Xunit2" Version="1.4.5" />
1212
</ItemGroup>
1313

1414
<ItemGroup>
Lines changed: 42 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,30 @@
1-
using System;
21
using System.Linq;
2+
using System.Threading;
33
using Akka.Actor;
44
using Akka.Configuration;
55
using Akka.Event;
66
using Xunit;
77
using Xunit.Abstractions;
8+
using LogLevel = Akka.Event.LogLevel;
89

9-
namespace Akka.Logger.Serilog.Tests
10+
namespace Akka.Logger.NLog.Tests
1011
{
1112
public class NLogFormattingSpecs : TestKit.Xunit2.TestKit
1213
{
13-
public static readonly Config Config = @"akka.loglevel = DEBUG";
14+
private static readonly Config Config = @"akka.loglevel = DEBUG";
1415

1516
private readonly ILoggingAdapter _loggingAdapter;
16-
private readonly global::NLog.Targets.MemoryTarget _loggingTarget = new global::NLog.Targets.MemoryTarget() { Layout = "${level}|${message}" };
17+
const string ActorSystemName = "my-test-system";
1718

1819
public NLogFormattingSpecs(ITestOutputHelper helper) : base(Config, output: helper)
1920
{
2021
Config myConfig = @"akka.loglevel = DEBUG
2122
akka.loggers=[""Akka.Logger.NLog.NLogLogger, Akka.Logger.NLog""]";
2223

23-
var system = ActorSystem.Create("my-test-system", myConfig);
24+
var system = ActorSystem.Create(ActorSystemName, myConfig);
2425

2526
_loggingAdapter = Logging.GetLogger(system.EventStream, system.Name);
2627

27-
global::NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(_loggingTarget);
28-
2928
Sys.EventStream.Subscribe(TestActor, typeof(LogEvent));
3029
}
3130

@@ -38,19 +37,49 @@ public NLogFormattingSpecs(ITestOutputHelper helper) : base(Config, output: help
3837
[InlineData(LogLevel.ErrorLevel, "test case {c}", new object[] { 3.0 }, "Error|test case 3")]
3938
public void LoggingTest(LogLevel level, string formatStr, object[] formatArgs, string resultStr)
4039
{
41-
_loggingTarget.Logs.Clear();
40+
var loggingTarget = new global::NLog.Targets.MemoryTarget { Layout = "${level}|${message}" };
41+
global::NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(loggingTarget);
42+
43+
loggingTarget.Logs.Clear();
44+
_loggingAdapter.Log(level, formatStr, formatArgs);
45+
46+
for (var i = 0; i < 100; ++i)
47+
{
48+
if (loggingTarget.Logs.Count != 0)
49+
break;
50+
51+
Thread.Sleep(10);
52+
}
53+
54+
Assert.NotEmpty(loggingTarget.Logs);
55+
Assert.Equal(resultStr, loggingTarget.Logs.Last());
56+
}
57+
58+
[Theory]
59+
[InlineData(LogLevel.InfoLevel, "test case {0}", new object[] { 1 }, "{0}|{1}|test case 1")]
60+
public void LoggingTestWithEventProperties(LogLevel level, string formatStr, object[] formatArgs, string resultStr)
61+
{
62+
_loggingAdapter.Log(level, formatStr, formatArgs);
63+
var loggingTarget = new global::NLog.Targets.MemoryTarget
64+
{Layout = "${event-properties:item=logSource}|${event-properties:item=threadId:format=D4}|${message}" };
65+
global::NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(loggingTarget);
66+
67+
loggingTarget.Logs.Clear();
4268
_loggingAdapter.Log(level, formatStr, formatArgs);
4369

44-
for (int i = 0; i < 100; ++i)
70+
for (var i = 0; i < 100; ++i)
4571
{
46-
if (_loggingTarget.Logs.Count != 0)
72+
if (loggingTarget.Logs.Count != 0)
4773
break;
4874

49-
System.Threading.Thread.Sleep(10);
75+
Thread.Sleep(10);
5076
}
5177

52-
Assert.NotEmpty(_loggingTarget.Logs);
53-
Assert.Equal(resultStr, _loggingTarget.Logs.Last());
78+
var formattedResultString = string.Format(resultStr, ActorSystemName,
79+
Thread.CurrentThread.ManagedThreadId.ToString().PadLeft(4, '0'));
80+
81+
Assert.NotEmpty(loggingTarget.Logs);
82+
Assert.Equal(formattedResultString, loggingTarget.Logs.Last());
5483
}
5584
}
5685
}
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<Import Project="..\common.props" />
33
<PropertyGroup>
4-
<TargetFrameworks>net452;netstandard1.6</TargetFrameworks>
4+
<TargetFrameworks>netstandard2.0</TargetFrameworks>
55
<Description>NLog logging adapter for Akka.NET.</Description>
66
<GenerateDocumentationFile>true</GenerateDocumentationFile>
77
</PropertyGroup>
88
<ItemGroup>
9-
<PackageReference Include="Akka" Version="1.3.17" />
10-
<PackageReference Include="NLog" Version="4.5.11" />
9+
<PackageReference Include="Akka" Version="1.4.5" />
10+
<PackageReference Include="NLog" Version="4.7.0" />
1111
</ItemGroup>
1212
</Project>

src/Akka.Logger.NLog/NLog.Example.config

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
33
<targets>
44
<target name="console" xsi:type="Console" layout="[${logger}] [${level:uppercase=true}] : ${message}"/>
5-
<target name="logFile" xsi:type="File" fileName="log.txt" layout="[${longdate}] [${logger}] ${level:uppercase=true}] : ${event-properties:SourceContext} ${message} ${exception:format=tostring}" />
5+
<target name="logFile" xsi:type="File" fileName="log.txt" layout="[${longdate}] [${logger}] ${level:uppercase=true}] : ${event-properties:actorPath} ${message} ${exception:format=tostring}" />
66
</targets>
77
<rules>
88
<logger name="*" minlevel="Info" writeTo="console"/>

src/Akka.Logger.NLog/NLogLogger.cs

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -39,33 +39,31 @@ private static void Log(LogEvent logEvent, Action<NLogger, LogEvent> logStatemen
3939
/// </summary>
4040
public NLogLogger()
4141
{
42-
Receive<Error>(m => Log(m, (logger, logEvent) => LogEvent(logger, NLogLevel.Error, logEvent.LogSource, m.Cause, logEvent.Message)));
43-
Receive<Warning>(m => Log(m, (logger, logEvent) => LogEvent(logger, NLogLevel.Warn, logEvent.LogSource, logEvent.Message)));
44-
Receive<Info>(m => Log(m, (logger, logEvent) => LogEvent(logger, NLogLevel.Info, logEvent.LogSource, logEvent.Message)));
45-
Receive<Debug>(m => Log(m, (logger, logEvent) => LogEvent(logger, NLogLevel.Debug, logEvent.LogSource, logEvent.Message)));
42+
Receive<Error>(m => Log(m, (logger, logEvent) => LogEvent(logger, NLogLevel.Error, logEvent.Cause, logEvent)));
43+
Receive<Warning>(m => Log(m, (logger, logEvent) => LogEvent(logger, NLogLevel.Warn, logEvent.Cause, logEvent)));
44+
Receive<Info>(m => Log(m, (logger, logEvent) => LogEvent(logger, NLogLevel.Info, logEvent.Cause, logEvent)));
45+
Receive<Debug>(m => Log(m, (logger, logEvent) => LogEvent(logger, NLogLevel.Debug, logEvent.Cause, logEvent)));
4646
Receive<InitializeLogger>(m =>
4747
{
4848
_log.Info("NLogLogger started");
4949
Sender.Tell(new LoggerInitialized());
5050
});
5151
}
5252

53-
private static void LogEvent(NLogger logger, NLogLevel level, string logSource, object message)
54-
{
55-
LogEvent(logger, level, logSource, null, message);
56-
}
57-
58-
private static void LogEvent(NLogger logger, NLogLevel level, string logSource, Exception exception, object message)
53+
private static void LogEvent(NLogger logger, NLogLevel level, Exception exception, LogEvent logEvent)
5954
{
6055
if (logger.IsEnabled(level))
6156
{
62-
LogMessage logMessage = message as LogMessage;
63-
var logEvent = (logMessage != null && logMessage.Args?.Length > 0) ?
57+
LogMessage logMessage = logEvent.Message as LogMessage;
58+
var logEventInfo = (logMessage != null && logMessage.Args?.Length > 0) ?
6459
new LogEventInfo(level, logger.Name, null, logMessage.Format, logMessage.Args, exception) :
65-
new LogEventInfo(level, logger.Name, null, "{0}", new[] { message }, exception);
66-
logEvent.Properties["logSource"] = logSource; // TODO logSource is the same as logger.Name, now adding twice
67-
logEvent.Properties["SourceContext"] = Context?.Sender?.Path?.ToString() ?? string.Empty; // Same as Serilog
68-
logger.Log(logEvent);
60+
new LogEventInfo(level, logger.Name, null, "{0}", new[] { logEvent.Message.ToString() }, exception);
61+
if (logEventInfo.TimeStamp.Kind == logEvent.Timestamp.Kind)
62+
logEventInfo.TimeStamp = logEvent.Timestamp; // Timestamp of original LogEvent (instead of async Logger thread timestamp)
63+
logEventInfo.Properties["logSource"] = logEvent.LogSource;
64+
logEventInfo.Properties["actorPath"] = Context?.Sender?.Path?.ToString() ?? string.Empty; // Same as Serilog
65+
logEventInfo.Properties["threadId"] = logEvent.Thread.ManagedThreadId; // ThreadId of the original LogEvent (instead of async Logger threadid)
66+
logger.Log(logEventInfo);
6967
}
7068
}
7169
}

src/common.props

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33
<PackageTags>akka;actors;actor model;Akka;concurrency;nlog</PackageTags>
44
<Copyright>Copyright © 2013-2020 Akka.NET Contrib Team</Copyright>
55
<Authors>Akka.NET Contrib Team</Authors>
6-
<PackageReleaseNotes>Dependency update for Akka 1.3.17 and NLog 4.5.11 for net452</PackageReleaseNotes>
7-
<VersionPrefix>1.3.0</VersionPrefix>
6+
<PackageReleaseNotes>- Update Akka to 1.4.5
7+
- Update NLog to 4.7.0</PackageReleaseNotes>
8+
<VersionPrefix>1.4.5</VersionPrefix>
89
<PackageIconUrl>https://getakka.net/images/akkalogo.png</PackageIconUrl>
910
<PackageProjectUrl>https://github.com/AkkaNetContrib/Akka.Logger.Nlog</PackageProjectUrl>
1011
<PackageLicenseUrl>https://github.com/AkkaNetContrib/Akka.Logger.Nlog/blob/master/LICENSE</PackageLicenseUrl>

0 commit comments

Comments
 (0)