Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(logging): Add support for ILogger-based debug logging, including BYO #195

Merged
merged 5 commits into from
Oct 16, 2024

Conversation

adambollen
Copy link
Contributor

Description

BT-5158

This change adds support for additional debug/trace logging in the driver via Microsoft.Extensions.Logging.ILogger interface. Consumers of the driver can set the FAUNA_DEBUG environment variable to 0 or 1 (higher is less verbose in .NET log-levels, so 2+ won't output anything at the moment), which will cause the new Logger static class to instantiate a default ILogger implementation that writes all messages to stderr (to avoid polluting stdout for consumers). At present, the driver will output details about the HTTP request and response to/from Fauna with the Authorization header value redacted for security reasons.

However, if consumers want to bring their own ILogger implementation (i.e. Serilog), they can pass it to the Configuration class when creating a Client object. The README has an example.

Motivation and context

The driver should provide additional debugging information when desired to help aid in debugging issues for consumers, as well as giving consumers a way to get debug messages that they can send to Fauna Support if they're experiencing issues.

How was the change tested?

I added a test with a Mock<ILogger> to make sure we don't break the BYO functionality. I also manually verified the BYO functionality in a test app using Serilog.

Output from default logger:

2024-10-15T05:17:05.089Z dbug: fauna-dotnet[0] Fauna HTTP POST Request to http://localhost:8443/query/1 (timeout 5000ms), headers: {"Accept":["application/json"],"Accept-Encoding":["gzip"],"Authorization":["HIDDEN"],"X-Format":["tagged"],"X-Driver":["C#"],"X-Last-Txn-Ts":["0"]}
2024-10-15T05:17:05.481Z dbug: fauna-dotnet[0] Fauna HTTP Response OK from http://localhost:8443/query/1, headers: {"x-faunadb-build":["24.09.04-1d6ea0d"],"Connection":["keep-alive"],"traceparent":["00-a2fa6d6be49f51476c8a2db51e5a1871-a0fd66fae7a8db6c-00"]}

Change types

    • Bug fix (non-breaking change that fixes an issue)
    • New feature (non-breaking change that adds functionality)
    • Breaking change (backwards-incompatible fix or feature)

Checklist:

    • My code follows the code style of this project.
    • My change requires a change to Fauna documentation.
    • My change requires a change to the README, and I have updated it accordingly.

By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

Copy link
Contributor

@jrodewig jrodewig left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Narrow +1 on the README. I left some README suggestions you can take or leave as you see fit. Thanks!

README.md Outdated Show resolved Hide resolved
README.md Outdated Show resolved Hide resolved
README.md Outdated Show resolved Hide resolved
README.md Outdated Show resolved Hide resolved
README.md Outdated Show resolved Hide resolved
README.md Outdated Show resolved Hide resolved
Copy link

github-actions bot commented Oct 15, 2024

Summary

Summary
Generated on: 10/15/2024 - 22:13:08
Parser: OpenCover
Assemblies: 1
Classes: 119
Files: 94
Line coverage: 81% (3178 of 3919)
Covered lines: 3178
Uncovered lines: 741
Coverable lines: 3919
Total lines: 8686
Branch coverage: 70.8% (1026 of 1448)
Covered branches: 1026
Total branches: 1448
Method coverage: Feature is only available for sponsors
Tag: 3528a77

Coverage

Fauna - 81%
Name Line Branch
Fauna 81% 70.8%
Fauna.BaseClient 83.3% 72.2%
Fauna.Client 73.4% 52.9%
Fauna.Configuration 100% 100%
Fauna.Core.Connection 95.3% 72.9%
Fauna.Core.Endpoints 100% 100%
Fauna.Core.ErrorInfo 100%
Fauna.Core.QueryFailure 100% 66.6%
Fauna.Core.QueryOptions 82.1% 81.8%
Fauna.Core.QueryResponse 70% 77.2%
Fauna.Core.QueryStats 57.1%
Fauna.Core.QuerySuccess`1 69.2% 50%
Fauna.Core.RetryConfiguration 100% 100%
Fauna.Core.Stats 100%
Fauna.Core.StatsCollector 86.2% 100%
Fauna.Core.StreamEnumerable`1 100% 66.6%
Fauna.Exceptions.AbortException 100% 83.3%
Fauna.Exceptions.AuthenticationException 100%
Fauna.Exceptions.AuthorizationException 100%
Fauna.Exceptions.BadGatewayException 0%
Fauna.Exceptions.ConstraintFailure 100%
Fauna.Exceptions.ConstraintFailureException 100%
Fauna.Exceptions.ContendedTransactionException 100%
Fauna.Exceptions.ExceptionHandler 84.3% 89.3%
Fauna.Exceptions.FaunaException 25%
Fauna.Exceptions.InvalidRequestException 100%
Fauna.Exceptions.NetworkException 100%
Fauna.Exceptions.NullDocumentException 100% 100%
Fauna.Exceptions.ProtocolException 0%
Fauna.Exceptions.QueryCheckException 100%
Fauna.Exceptions.QueryRuntimeException 100%
Fauna.Exceptions.QueryTimeoutException 100%
Fauna.Exceptions.SerializationException 100%
Fauna.Exceptions.ServiceException 80.9%
Fauna.Exceptions.ThrottlingException 42.8%
Fauna.Exceptions.TimeoutException 100%
Fauna.IQueryFragmentExtensions 0%
Fauna.Linq.DataContext 84.1% 87.5%
Fauna.Linq.DataContextBuilder`1 92.1% 86.6%
Fauna.Linq.IntermediateQueryHelpers 80% 83.3%
Fauna.Linq.IPipelineExecutor 55.2% 28.2%
Fauna.Linq.IQuerySource 0% 0%
Fauna.Linq.LookupTable 40% 16.6%
Fauna.Linq.MappedDeserializer`2 75%
Fauna.Linq.Pipeline 100% 100%
Fauna.Linq.ProjectionAnalysisVisitor 96.1% 87.5%
Fauna.Linq.ProjectionDeserializer 80.9% 58.3%
Fauna.Linq.ProjectionRewriteVisitor 100% 100%
Fauna.Linq.QuerySource 100%
Fauna.Linq.QuerySource`1 93.7% 90.7%
Fauna.Linq.QuerySourceExtensions 25% 50%
Fauna.Linq.SubQuerySwitch 56.7% 19.4%
Fauna.Mapping.BaseFieldAttribute 100%
Fauna.Mapping.CollectionAttribute 100%
Fauna.Mapping.FieldAttribute 100%
Fauna.Mapping.FieldInfo 100% 91.6%
Fauna.Mapping.FieldName 100% 100%
Fauna.Mapping.IdAttribute 100% 50%
Fauna.Mapping.IgnoreAttribute 100%
Fauna.Mapping.MappingContext 100% 100%
Fauna.Mapping.MappingInfo 96.5% 100%
Fauna.Mapping.TsAttribute 100%
Fauna.Query 100%
Fauna.QueryArr 58.6% 50%
Fauna.QueryExpr 80% 50%
Fauna.QueryLiteral 86.1% 62.5%
Fauna.QueryObj 32.1% 0%
Fauna.QueryStringHandler 100% 100%
Fauna.QueryVal 79.5% 50%
Fauna.Serialization.BaseRefSerializer`1 82.8% 78.5%
Fauna.Serialization.BaseSerializer`1 18.7% 0%
Fauna.Serialization.BooleanSerializer 92.3% 83.3%
Fauna.Serialization.ByteSerializer 92.3% 83.3%
Fauna.Serialization.ClassSerializer`1 83.6% 80.9%
Fauna.Serialization.DateOnlySerializer 92.3% 83.3%
Fauna.Serialization.DateTimeOffsetSerializer 92.3% 83.3%
Fauna.Serialization.DateTimeSerializer 92.3% 83.3%
Fauna.Serialization.DictionarySerializer`1 84% 75%
Fauna.Serialization.DoubleSerializer 92.3% 83.3%
Fauna.Serialization.DynamicSerializer 92.4% 76.1%
Fauna.Serialization.FloatSerializer 92.3% 83.3%
Fauna.Serialization.IntSerializer 92.3% 83.3%
Fauna.Serialization.ListSerializer`1 85% 66.6%
Fauna.Serialization.LongSerializer 92.3% 83.3%
Fauna.Serialization.ModuleSerializer 30.7% 16.6%
Fauna.Serialization.NamedRefSerializer`1 100%
Fauna.Serialization.NullableSerializer`1 100% 100%
Fauna.Serialization.NullableStructSerializer`1 100% 100%
Fauna.Serialization.PageSerializer`1 92.1% 87.5%
Fauna.Serialization.QueryArrSerializer 0% 0%
Fauna.Serialization.QueryExprSerializer 77.7% 66.6%
Fauna.Serialization.QueryLiteralSerializer 55.5% 50%
Fauna.Serialization.QueryObjSerializer 69.2% 50%
Fauna.Serialization.QuerySerializer 60% 50%
Fauna.Serialization.QueryValSerializer 69.2% 50%
Fauna.Serialization.RefSerializer`1 100%
Fauna.Serialization.SByteSerializer 92.3% 83.3%
Fauna.Serialization.Serializer 90.3% 82.2%
Fauna.Serialization.ShortSerializer 92.3% 83.3%
Fauna.Serialization.StreamSerializer 57.1% 50%
Fauna.Serialization.StringSerializer 92.8% 87.5%
Fauna.Serialization.UIntSerializer 92.3% 83.3%
Fauna.Serialization.UShortSerializer 92.3% 83.3%
Fauna.Serialization.Utf8FaunaReader 72.6% 77.8%
Fauna.Serialization.Utf8FaunaWriter 90.1%
Fauna.StreamOptions 61.5%
Fauna.Types.BaseRef`1 55%
Fauna.Types.BaseRefBuilder`1 95% 81.8%
Fauna.Types.Event`1 85.4% 66.6%
Fauna.Types.Module 52.6% 20%
Fauna.Types.NamedRef`1 60% 62.5%
Fauna.Types.Page`1 100%
Fauna.Types.Ref`1 60% 62.5%
Fauna.Types.Stream 66.6% 35.7%
Fauna.Util.DefaultExpressionSwitch`1 0%
Fauna.Util.Expressions 100% 100%
Fauna.Util.ExpressionSwitch`1 84.8% 75.5%
Fauna.Util.Extensions.PaginationExtensions 100% 100%
Fauna.Util.Extensions.TypeExtensions 93.3% 81.2%
Fauna.Util.Logger 78.7% 40%

Delta Summary

Generated on: 10/15/2024 - 22:13
Description Previous Current Delta
Coverage date: 10/15/2024 - 22:12 10/15/2024 - 22:13
Tag: main 3528a77
Line coverage: 80.9% 81% 0.1%
Covered lines: 3122 3178 56
Coverable lines: 3856 3919 63
Total lines: 14878 14994 116
Branch coverage: 70.9% 70.8% -0.1%
Covered branches: 1007 1026 19
Total branches: 1420 1448 28
Method coverage: Feature is only available for sponsors

Copy link

@findgriffin findgriffin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks like it's copacetic with the implementation in the other drivers.

README.md Show resolved Hide resolved
@adambollen adambollen merged commit edc7b8c into main Oct 16, 2024
5 checks passed
@adambollen adambollen deleted the debug-logging branch October 16, 2024 20:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants