-
-
Notifications
You must be signed in to change notification settings - Fork 136
Open
Labels
Description
What do you think about allowing individual logger instances to carry their own tags? This would be particularly useful when loggers are owned by an object with an identity (e.g. an ActiveRecord instance).
To clarify what I mean, consider the following example:
class Cart < Entity
include SemanticLogging::Loggable
def add_item(item_id, quantity)
SemanticLogger.tagged(cart_id: self.id) do
InventoryService.reserve_items(item_id: item_id, quantity: quantity, reserved_by: self)
# do stuff, maybe a lot of stuff
logger.debug('added item', item_id: item_id, quantity: quantity)
end
end
def remove_item(item_id, quantity)
SemanticLogger.tagged(cart_id: self.id) do
InventoryService.cancel_item_reservation(item_id: item_id, quantity: quantity, reserved_by: self)
# again do a variety of things here
logger.debug('removed item', item_id: item_id, quantity: quantity)
end
end
endAs the number of methods grows, repeating SemanticLogger.tagged(cart_id: self.id) becomes tedious and leads to a lot of indenting. It also means all logging messages of the InventoryService are tagged with the current cart ID, which isn't always desirable.
What would be nice is if I could write this:
class Cart < Entity
include SemanticLogging::Loggable
def logger
@logger ||= super.with_tags(cart_id: self.id)
end
def add_item(item_id, quantity)
InventoryService.reserve_items(item_id: item_id, quantity: quantity, reserved_by: self)
# do more stuff here
logger.debug('added item', item_id: item_id, quantity: quantity)
end
def remove_item(item_id, quantity)
InventoryService.cancel_item_reservation(item_id: item_id, quantity: quantity, reserved_by: self)
# do other stuff here
logger.debug('removed item', item_id: item_id, quantity: quantity)
end
endAnd in case I want the current #tagged behaviour:
class Cart < Entity
def add_item(other_cart)
logger.tagged do
# messages in this block are tagged with cart_id
InventoryService.reserve_items(item_id: item_id, quantity: quantity, reserved_by: self)
# do more stuff here
logger.debug('added item', item_id: item_id, quantity: quantity)
end
end
endtodd-a-jacobs, radomirz, preethi29, waferbaby, ag-TJNII and 1 more