-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Simplify WithAutoFlush-method for fluent config API #5968
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
Conversation
WalkthroughAdds a new bool-predicate overload for creating parameterless condition methods and updates WithAutoFlush to use it instead of boxing booleans. No other behavior changes. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
actor App
participant Setup as SetupLoadConfigurationExtensions
participant Cond as ConditionMethodExpression
participant Wrapper as AutoFlushTargetWrapper
participant Logger as Logger Pipeline
App->>Setup: WithAutoFlush(conditionMethod)
Setup->>Cond: CreateMethodNoParameters("AutoFlush", Func<LogEventInfo,bool>)
Cond-->>Setup: ConditionMethodExpression (no-params)
Setup->>Wrapper: Configure AutoFlush(condition)
note right of Wrapper: Uses condition to decide when to Flush
Logger->>Wrapper: Process(LogEventInfo)
Wrapper->>Cond: Evaluate condition(LogEventInfo)
alt condition true
Wrapper->>Wrapper: Flush()
else condition false
Wrapper-->>Logger: Continue without flush
end
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Poem
Tip 🔌 Remote MCP (Model Context Protocol) integration is now available!Pro plan users can now connect to remote MCP servers from the Integrations page. Connect with popular remote MCPs such as Notion and Linear to add more context to your reviews and chats. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. CodeRabbit Commands (Invoked using PR/Issue comments)Type Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (2)
src/NLog/Conditions/ConditionMethodExpression.cs (2)
90-93: Add null-guard for the bool predicate to keep early validation consistent.Currently a null
methodwould defer failure to evaluation time (NullReferenceException) instead of failing fast like the object-returning overload. Guard it up-front.Apply this diff:
- public static ConditionMethodExpression CreateMethodNoParameters(string conditionMethodName, Func<LogEventInfo, bool> method) - { - return CreateMethodNoParameters(conditionMethodName, (evt) => method(evt) ? BoxedTrue : BoxedFalse); - } + public static ConditionMethodExpression CreateMethodNoParameters(string conditionMethodName, Func<LogEventInfo, bool> method) + { + var predicate = Guard.ThrowIfNull(method); + return CreateMethodNoParameters(conditionMethodName, evt => predicate(evt) ? BoxedTrue : BoxedFalse); + }
90-93: Optional: document intent and perf characteristics of the new overload.A short XML doc helps discoverability and clarifies that it maps to
BoxedTrue/BoxedFalseto avoid per-call boxing.For example (outside the selected lines, above the method):
/// <summary> /// Convenience overload for parameterless predicates that return bool. /// Returns cached BoxedTrue/BoxedFalse to avoid per-evaluation boxing. /// </summary>
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled by default for public repositories
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (2)
src/NLog/Conditions/ConditionMethodExpression.cs(1 hunks)src/NLog/SetupLoadConfigurationExtensions.cs(1 hunks)
🧰 Additional context used
🧬 Code graph analysis (2)
src/NLog/SetupLoadConfigurationExtensions.cs (1)
src/NLog/Conditions/ConditionMethodExpression.cs (8)
ConditionMethodExpression(41-232)ConditionMethodExpression(52-57)ConditionMethodExpression(85-88)ConditionMethodExpression(90-93)ConditionMethodExpression(95-99)ConditionMethodExpression(101-106)ConditionMethodExpression(108-114)ConditionMethodExpression(116-119)
src/NLog/Conditions/ConditionMethodExpression.cs (2)
src/NLog/Conditions/ConditionParser.cs (2)
ConditionMethodExpression(113-145)ConditionMethodExpression(147-183)src/NLog/Config/MethodFactory.cs (5)
Func(352-361)Func(363-372)Func(374-383)Func(385-394)Func(396-443)
🔇 Additional comments (1)
src/NLog/SetupLoadConfigurationExtensions.cs (1)
677-681: AllCreateMethodNoParametersusages already leverage the bool–predicate overload—no further boxing candidates foundI’ve verified across the
srcfolder that:
- Every
ConditionMethodExpression.CreateMethodNoParameters(…)invocation accepts aFunc<LogEventInfo, bool>, so it already returns the cachedBoxedTrue/BoxedFalse.- There are no direct call sites producing a boxed result that could be switched to the bool overload.
- All remaining
ConditionExpression.BoxedTrue/BoxedFalseusages reside within the core condition‐evaluation engine and wrapper filters (e.g.AutoFlushTargetWrapper,PostFilteringTargetWrapper, logical expressions), where they’re used for compare/evaluate logic—not method binding.No additional manual conversions are required.
|



No description provided.