Comments (3)
First of all thanks for a well-written issue, that clearly describes the problem and the solution you're looking for!
The reason for this is that the swift-log backend (CocoaLumberjackSwiftLogBackend
) intentionally is a completely separate target from CocoaLumberjackSwift
- and the latter has the dynamicLogLevel
feature.
Both targets offer a different kind of "frontend" to the Objective-C target CocoaLumberjack
.
swift-log
states, that whether log messages are logged or not should normally not be under the control of a log handler:
This is why we don't have something like dynamicLogLevel
in our log handler. The dynamicLogLevel
is basically the equivalent of swift-log
's Logger.logLevel
property. Since CocoaLumberjackSwift
does not have a Logger
object, the dynamicLogLevel
resides on the top level.
As for what I'd recommend:
Use dynamicLogLevel
for usages with the DDLogXYZ
functions only. If you need to filter log messages later on, you could e.g. configure your DDLogger
s with a DDLogFormatter
that simply returns nil for messages below (or above for that matter) a certain level. This results in the log message not being logged.
Another option would be what you already started: To use a subclass of DDLog
and filter the messages there. I'd just recommend not to use dynamicLogLevel
for filtering here, but instead add your own property for a global log level.
In both cases: make sure you do protect this "global" log level correctly against concurrent access!
Btw. this is an issue that dynamicLogLevel
has at the moment: It's not actually protected against concurrent modification.
from cocoalumberjack.
Thanks @ffried for the detailed response, I really appreciate.
We've been using dynamicLogLevel
to have a "Debug log" toggle in the app so that we can get debug logs if needed from our users. So I need the debug log toggle to toggle a global state, and it should now affect both DDLogXYZ
functions and the swift-log
's loggers (we are progressively introducing swift-log). I'm already using a user defaults as this global state (when it's changed, it changes dynamicLogLevel
), so I could read this user default in my DDLog
subclass instead of reading dynamicLogLevel
.
from cocoalumberjack.
That sounds like a good solution. UserDefaults
should be thread-safe as well.
from cocoalumberjack.
Related Issues (20)
- crash in [DDLogMessage initWithFormat:args:level:flag:context:file:function:line:tag:options:timestamp] HOT 3
- Log messages dispatched using the swift-log backend are missing normal swift-log formatting. HOT 1
- Question about CocoaLumberjack Behavior - Deleting All Files when logFilesDiskQuota is Reached HOT 1
- Deprecated message at DDLogInfo
- Thread running at QOS_CLASS_USER_INTERACTIVE waiting on a lower QoS thread running at QOS_CLASS_BACKGROUND. Investigate ways to avoid priority inversions HOT 2
- Privacy manifest for new sensitive APIs HOT 5
- Race condition when configuring DDLogFileManagerDefault HOT 1
- Library is not visible in ObjC when using SPM HOT 6
- pod 'CocoaLumberjack/Swift' 报错:Function Parameter Count Violation: Function should have 5 parameters or less: it currently has 10 (function_parameter_count) HOT 2
- Bump `IPHONEOS_DEPLOYMENT_TARGET` in podspec to appease Cocoapods on Xcode15 HOT 2
- NSGenericDeallocHandler release crash when calling registeredClasses HOT 1
- CocoaLumberjack v3.8.3 - Privacy Manifest - Missing an expected key: 'NSPrivacyCollectedDataTypes' HOT 3
- Multiple commands produce PrivacyInfo.xcprivacy HOT 8
- DDOSLogger Info, Warning, Debug, and Verbose logs do not appear in Console.app when streaming from iOS simulator. HOT 4
- Add optional custom format specifiers to DDLogMessageFormat HOT 1
- Compilation Error with Xcode 15 during Archive Operation HOT 1
- Confused about DDFileLog。 HOT 2
- When will visionOS be supported
- osLogTypeForLogFlag for FAULT HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from cocoalumberjack.