I'd like to know if there's a specific syntax that I'm supposed to use when using Serilog.
The documentation shows Log.Debug([...])
in pretty much every example.
However, given the following demo code:
using Serilog;
internal record User(
string FirstName,
string? LastName,
string Email,
int Id,
int Age,
string NickName
);
public class Program
{
public static void Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.CreateLogger();
var user = new User("First", null, "", 1, 2, "Test");
Log.Debug("User: {firstName} {lastName} {email} {id} {age} {nickname}", user.FirstName, user.LastName, user.Email, user.Id, user.Age, user.NickName);
Log.Logger.Debug("User: {firstName} {lastName}", user.FirstName, user.LastName, user.Email, user.Id, user.Age, user.NickName);
}
}
I get compiler warnings (warning CS8604: Possible null reference argument for parameter 'propertyValues' in 'void Log.Debug(string messageTemplate, params object[] propertyValues)'.
) for the first Log.Debug
call because user.LastName
could be null.
The Log.Debug
method shows the following parameters:
Whereas the Log.Logger.Debug
call does not give me this compiler warning, because it has a different signature:
This makes me want to use the second method, instead of the global Log
class.
Is this difference intentional and should I be using the Log
class over the Log.Logger
setup, or is it simply an oversight/bug in the Serilog library?
During runtime I haven't noticed a difference.
I've used both methods, one gives me the compiler warnings, the other doesn't. I don't care if I have to use Log.Logger
to make the warnings go away, but I'd just like to confirm that one isn't better than the other.
The latest source code uses the same arguments and won't generate any nullability warnings :
[MessageTemplateFormatMethod("messageTemplate")]
public static void Debug(string messageTemplate, params object?[]? propertyValues)
{
Logger.Debug(messageTemplate, propertyValues);
}
Github's Blame shows that this line was last modified in August 2022. The fix should be included in Serilog 2.12 which was released in September 2022