Skip to content

Commit b96b905

Browse files
authored
Merge pull request #27 from akkadotnet/dev
Akka 1.2.0 release
2 parents 505a4c0 + 4c4aabe commit b96b905

File tree

8 files changed

+208
-21
lines changed

8 files changed

+208
-21
lines changed

RELEASE_NOTES.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
#### 1.2.0 April 18 2017 ####
2+
3+
Support for Akka 1.2.0
4+
15
#### 1.1.3 Januari 26 2017 ####
26

37
Support for Akka 1.1.3

src/Akka.Logger.Serilog/Akka.Logger.Serilog.csproj

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@
3131
<DocumentationFile>bin\Release\Akka.Logger.Serilog.xml</DocumentationFile>
3232
</PropertyGroup>
3333
<ItemGroup>
34-
<Reference Include="Akka, Version=1.1.3.31, Culture=neutral, processorArchitecture=MSIL">
35-
<HintPath>..\packages\Akka.1.1.3\lib\net45\Akka.dll</HintPath>
34+
<Reference Include="Akka, Version=1.2.0.33, Culture=neutral, processorArchitecture=MSIL">
35+
<HintPath>..\packages\Akka.1.2.0\lib\net45\Akka.dll</HintPath>
3636
<Private>True</Private>
3737
</Reference>
3838
<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
@@ -44,8 +44,8 @@
4444
<Private>True</Private>
4545
</Reference>
4646
<Reference Include="System" />
47-
<Reference Include="System.Collections.Immutable, Version=1.1.36.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
48-
<HintPath>..\packages\System.Collections.Immutable.1.1.36\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll</HintPath>
47+
<Reference Include="System.Collections.Immutable, Version=1.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
48+
<HintPath>..\packages\System.Collections.Immutable.1.3.1\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll</HintPath>
4949
<Private>True</Private>
5050
</Reference>
5151
<Reference Include="System.Core" />
@@ -56,12 +56,15 @@
5656
<Link>Properties\SharedAssemblyInfo.cs</Link>
5757
</Compile>
5858
<Compile Include="MessageTemplateCache.cs" />
59+
<Compile Include="SerilogLoggingAdapter.cs" />
60+
<Compile Include="SerilogLoggingAdapterExtensions.cs" />
5961
<Compile Include="SerilogLogMessageFormatter.cs" />
6062
<Compile Include="SerilogLogger.cs" />
6163
<Compile Include="Properties\AssemblyInfo.cs" />
6264
</ItemGroup>
6365
<ItemGroup>
6466
<None Include="Akka.Logger.Serilog.nuspec" />
67+
<None Include="app.config" />
6568
<None Include="packages.config" />
6669
</ItemGroup>
6770
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

src/Akka.Logger.Serilog/SerilogLogger.cs

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,12 @@
55
// </copyright>
66
//-----------------------------------------------------------------------
77

8-
using System;
8+
using System.Linq;
99
using Akka.Actor;
10+
using Akka.Dispatch;
1011
using Akka.Event;
1112
using Serilog;
12-
using Akka.Dispatch;
13+
using Serilog.Core.Enrichers;
1314

1415
namespace Akka.Logger.Serilog
1516
{
@@ -26,27 +27,28 @@ public class SerilogLogger : ReceiveActor, IRequiresMessageQueue<ILoggerMessageQ
2627
private static string GetFormat(object message)
2728
{
2829
var logMessage = message as LogMessage;
29-
30-
return logMessage != null
31-
? logMessage.Format
32-
: "{Message}";
30+
return logMessage != null ? logMessage.Format : "{Message}";
3331
}
3432

3533
private static object[] GetArgs(object message)
3634
{
3735
var logMessage = message as LogMessage;
38-
39-
return logMessage != null
40-
? logMessage.Args
41-
: new[] { message };
36+
return logMessage?.Args.Where(a => !(a is PropertyEnricher)).ToArray() ?? new[] { message };
4237
}
4338

4439
private static ILogger GetLogger(LogEvent logEvent) {
4540
var logger = Log.Logger.ForContext("SourceContext", Context.Sender.Path);
4641
logger = logger
47-
.ForContext("Timestamp", logEvent.Timestamp)
48-
.ForContext("LogSource", logEvent.LogSource)
49-
.ForContext("Thread", logEvent.Thread.ManagedThreadId.ToString().PadLeft(4, '0'));
42+
.ForContext("Timestamp", logEvent.Timestamp)
43+
.ForContext("LogSource", logEvent.LogSource)
44+
.ForContext("Thread", logEvent.Thread.ManagedThreadId.ToString().PadLeft(4, '0'));
45+
46+
var logMessage = logEvent.Message as LogMessage;
47+
if (logMessage != null)
48+
{
49+
logger = logMessage.Args.OfType<PropertyEnricher>().Aggregate(logger, (current, enricher) => current.ForContext(enricher));
50+
}
51+
5052
return logger;
5153
}
5254

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
using System;
2+
using System.Linq;
3+
using System.Collections.Generic;
4+
using Akka.Event;
5+
using Serilog.Core;
6+
using Serilog.Core.Enrichers;
7+
8+
namespace Akka.Logger.Serilog
9+
{
10+
public class SerilogLoggingAdapter : ILoggingAdapter
11+
{
12+
private readonly ILoggingAdapter adapter;
13+
private readonly IDictionary<string, ILogEventEnricher> enrichers = new Dictionary<string, ILogEventEnricher>();
14+
15+
public SerilogLoggingAdapter(ILoggingAdapter adapter)
16+
{
17+
this.adapter = adapter;
18+
}
19+
20+
/// <summary>
21+
/// Check to determine whether the <see cref="F:Akka.Event.LogLevel.DebugLevel" /> is enabled.
22+
/// </summary>
23+
public bool IsDebugEnabled => adapter.IsDebugEnabled;
24+
25+
/// <summary>
26+
/// Check to determine whether the <see cref="F:Akka.Event.LogLevel.InfoLevel" /> is enabled.
27+
/// </summary>
28+
public bool IsInfoEnabled => adapter.IsInfoEnabled;
29+
30+
/// <summary>
31+
/// Check to determine whether the <see cref="F:Akka.Event.LogLevel.WarningLevel" /> is enabled.
32+
/// </summary>
33+
public bool IsWarningEnabled => adapter.IsWarningEnabled;
34+
35+
/// <summary>
36+
/// Check to determine whether the <see cref="F:Akka.Event.LogLevel.ErrorLevel" /> is enabled.
37+
/// </summary>
38+
public bool IsErrorEnabled => adapter.IsErrorEnabled;
39+
40+
/// <summary>Determines whether a specific log level is enabled.</summary>
41+
/// <param name="logLevel">The log level that is being checked.</param>
42+
/// <returns><c>true</c> if the specified level is enabled; otherwise <c>false</c>.</returns>
43+
public bool IsEnabled(LogLevel logLevel)
44+
{
45+
return adapter.IsEnabled(logLevel);
46+
}
47+
48+
/// <summary>
49+
/// Logs a <see cref="F:Akka.Event.LogLevel.DebugLevel" /> message.
50+
/// </summary>
51+
/// <param name="format">The message that is being logged.</param>
52+
/// <param name="args">An optional list of items used to format the message.</param>
53+
public virtual void Debug(string format, params object[] args)
54+
{
55+
adapter.Debug(format, BuildArgs(args));
56+
}
57+
58+
/// <summary>
59+
/// Logs a <see cref="F:Akka.Event.LogLevel.InfoLevel" /> message.
60+
/// </summary>
61+
/// <param name="format">The message that is being logged.</param>
62+
/// <param name="args">An optional list of items used to format the message.</param>
63+
public virtual void Info(string format, params object[] args)
64+
{
65+
adapter.Info(format, BuildArgs(args));
66+
}
67+
68+
/// <summary>
69+
/// Obsolete. Use <see cref="M:Akka.Event.ILoggingAdapter.Warning(System.String,System.Object[])" /> instead!
70+
/// </summary>
71+
/// <param name="format">N/A</param>
72+
/// <param name="args">N/A</param>
73+
public virtual void Warn(string format, params object[] args)
74+
{
75+
adapter.Warning(format, BuildArgs(args));
76+
}
77+
78+
/// <summary>
79+
/// Logs a <see cref="F:Akka.Event.LogLevel.WarningLevel" /> message.
80+
/// </summary>
81+
/// <param name="format">The message that is being logged.</param>
82+
/// <param name="args">An optional list of items used to format the message.</param>
83+
public virtual void Warning(string format, params object[] args)
84+
{
85+
adapter.Warning(format, BuildArgs(args));
86+
}
87+
88+
/// <summary>
89+
/// Logs a <see cref="F:Akka.Event.LogLevel.ErrorLevel" /> message.
90+
/// </summary>
91+
/// <param name="format">The message that is being logged.</param>
92+
/// <param name="args">An optional list of items used to format the message.</param>
93+
public virtual void Error(string format, params object[] args)
94+
{
95+
adapter.Error(format, BuildArgs(args));
96+
}
97+
98+
/// <summary>
99+
/// Logs a <see cref="F:Akka.Event.LogLevel.ErrorLevel" /> message and associated exception.
100+
/// </summary>
101+
/// <param name="cause">The exception associated with this message.</param>
102+
/// <param name="format">The message that is being logged.</param>
103+
/// <param name="args">An optional list of items used to format the message.</param>
104+
public virtual void Error(Exception cause, string format, params object[] args)
105+
{
106+
adapter.Error(cause, format, BuildArgs(args));
107+
}
108+
109+
/// <summary>Logs a message with a specified level.</summary>
110+
/// <param name="logLevel">The level used to log the message.</param>
111+
/// <param name="format">The message that is being logged.</param>
112+
/// <param name="args">An optional list of items used to format the message.</param>
113+
public virtual void Log(LogLevel logLevel, string format, params object[] args)
114+
{
115+
adapter.Log(logLevel, format, BuildArgs(args));
116+
}
117+
118+
public ILoggingAdapter SetContextProperty(string name, object value, bool destructureObjects = false)
119+
{
120+
enrichers.Add(name, new PropertyEnricher(name, value, destructureObjects));
121+
return this;
122+
}
123+
124+
private object[] BuildArgs(IEnumerable<object> args)
125+
{
126+
var newArgs = args.ToList();
127+
newArgs.AddRange(enrichers.Select(enricher => enricher.Value));
128+
return newArgs.ToArray();
129+
}
130+
}
131+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
using System;
2+
using Akka.Actor;
3+
using Akka.Event;
4+
5+
namespace Akka.Logger.Serilog
6+
{
7+
public static class SerilogLoggingAdapterExtensions
8+
{
9+
/// <summary>
10+
/// Create a logger that enriches log events with the specified property.
11+
/// </summary>
12+
/// <param name="adapter">ILoggingAdapter instance</param>
13+
/// <param name="propertyName">The name of the property. Must be non-empty.</param>
14+
/// <param name="value">The property value.</param>
15+
/// <param name="destructureObjects">If true, the value will be serialized as a structured object if possible; if false, the object will be recorded as a scalar or simple array.</param>
16+
public static ILoggingAdapter ForContext(this ILoggingAdapter adapter, string propertyName, object value, bool destructureObjects = false)
17+
{
18+
var customAdapter = adapter as SerilogLoggingAdapter;
19+
return customAdapter == null ? adapter : customAdapter.SetContextProperty(propertyName, value, destructureObjects);
20+
}
21+
22+
/// <summary>
23+
/// Creates a new logging adapter using the specified context's event stream.
24+
/// </summary>
25+
/// <param name="context">The context used to configure the logging adapter.</param>
26+
/// <returns>The newly created logging adapter.</returns>
27+
public static ILoggingAdapter GetLogger<T>(this IActorContext context)
28+
where T : class, ILoggingAdapter
29+
{
30+
var logSource = context.Self.ToString();
31+
var logClass = context.Props.Type;
32+
33+
return Activator.CreateInstance(typeof(T), new BusLogging(context.System.EventStream, logSource, logClass, new SerilogLogMessageFormatter())) as T;
34+
}
35+
}
36+
}

src/Akka.Logger.Serilog/app.config

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<configuration>
3+
<runtime>
4+
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
5+
<dependentAssembly>
6+
<assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
7+
<bindingRedirect oldVersion="0.0.0.0-1.2.1.0" newVersion="1.2.1.0" />
8+
</dependentAssembly>
9+
</assemblyBinding>
10+
</runtime>
11+
</configuration>
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<packages>
3-
<package id="Akka" version="1.1.3" targetFramework="net45" />
3+
<package id="Akka" version="1.2.0" targetFramework="net45" />
44
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net45" />
55
<package id="Serilog" version="2.4.0" targetFramework="net45" />
6-
<package id="System.Collections.Immutable" version="1.1.36" targetFramework="net45" />
6+
<package id="System.Collections.Immutable" version="1.3.1" targetFramework="net45" />
77
</packages>

src/SharedAssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@
44
[assembly: AssemblyCompanyAttribute("Akka.NET Team")]
55
[assembly: AssemblyCopyrightAttribute("Copyright © 2013-2016 Akka.NET Team")]
66
[assembly: AssemblyTrademarkAttribute("")]
7-
[assembly: AssemblyVersionAttribute("1.1.3.0")]
8-
[assembly: AssemblyFileVersionAttribute("1.1.3.0")]
7+
[assembly: AssemblyVersionAttribute("1.2.0.0")]
8+
[assembly: AssemblyFileVersionAttribute("1.2.0.0")]

0 commit comments

Comments
 (0)