logging-log4cxx-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ben Arnold" <Ben.Arn...@magneticnorth.com>
Subject Context logging at a class level
Date Fri, 17 Dec 2004 16:59:48 GMT
Hi,

I have a (hopefully) simple question about getting context information into
my logging.

Say I have a class Agent:

class Agent { 
public: 
  long id() const { return myId_; } 
  void doSomething();

private:
  static LoggerPtr agentLogger_;
};

This agent is connected to by a number of IP clients, and there are a number
of agents in the system (each with their own ID)

I can use NDC to log the IP of the connecting client for all my logging
within the doSomething function, which is good.  However I would also like to
include the agent's ID implicitly without having to include it in each call
to .info() or .debug() etc.

So rather than...
agentLogger->info( "Agent " + id() + " processing request" );
(please assume that there is a nice way to concatenate a log4cxx string with
a long, that's merely for ease of reading)

I would rather write
agentLogger->info( "processing request" );

and end up with the same line in my log file, i.e. containing the "Agent 12 "
as context.  This would work together with the NDC to show the agent and
client, so the logging may resemble:

1563 192.168.1.1 Agent 12 processing request

This class-context would have to not be on a thread level as multiple threads
may be accessing several agents for the same client IP.

I had thought of creating an extra member for the Agent class, something like

  std::string loggingContext_;

and a macro to insert this at the front of any actual logging.  Or maybe a
simple class AgentLogger that defers to a static LoggerPtr with context
(this, however, is pretty much the same thing)  Both these seem a bit ugly
however, and I was hoping someone would have a more elegant solution for me.

Thank you all for your time,
Ben

Mime
View raw message