setting global, thread and event context properties

View: New views
2 Messages — Rating Filter:   Alert me  

setting global, thread and event context properties

by Romanowski Tomasz :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi !
 
 
I would like to log values set on different levels of context.
For global and thread context I managed to use Properties of these.
Then I wanted to log a value on event level.
The only way I figured out (I'm log4net beginner) was to use LoggingEvent:
 
This is how I log information:
 
        // global context
        const string AgentVersionKey = "AgentVersion";
        const string AgentIDKey = "AgentID";
        const string MACKey = "MAC";
        const string VolumeIDKey = "VolumeID";
        const string BIOSIDKey = "BIOSID";
        // thread context
        const string TTUserIDKey = "TTUserID";
        const string TTClientIDKey = "TTClientID";
        // event context
        const string CallOperKey = "CallOper";
        public static void LogInformation(string callingOperation, string info, params object[] args)
        {
            string message;
 
            message = String.Format(info, args);
            LoggingEvent logEvent;
            LoggingEventData logData;
 
            logData = new LoggingEventData();
            logData.TimeStamp = DateTime.Now;
           
            logData.Level = Level.Info;
            logData.Properties = new log4net.Util.PropertiesDictionary();
            logData.Properties[CallOperKey] = callingOperation;
            logData.Message = message;
 
            logEvent = new LoggingEvent(ThisDeclaringType, log.Logger.Repository, logData);
 
            log.Logger.Log(logEvent);
        }
 
while layout pattern is like this:
      <conversionPattern value=">>%date [%3thread] %-5level BIOSID:%property{BIOSID} VolumeID:%property{VolumeID} MAC:%property{MAC} Agent Ver.:%property{AgentVersion} Agent ID:%property{AgentID} User:%username TTUser:%-15property{TTUserID} TTClient:%-15property{TTClientID}%newline%property{CallOper} - %message%newline" />
 
My problem is, that when I'm logging code created event, I have null values for all non-event set properties, like BIOSID, MAC etc.
CallOper, which is the only property set on event, has right value.
Initially I just used log.Info to log information, and then all then BIOSID, MAC were present in logs.
 
What I'm doing wrong ?
 
BTW.
If I create loggingevent, then am I responsible for setting its call properties ? (I've noticed, that Timestamp was empty, that's why now I assign it in my code).
 
 

Best Regards
Tomek
--
  Tomek Romanowski

 

 

RE: setting global, thread and event context properties

by Romanowski Tomasz :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

(in case someone will need it)
 
it worked when I used other constructor of LoggingEvent:
 
            logEvent = new LoggingEvent(ThisDeclaringType, log.Logger.Repository,
                                        log.Logger.Name, Level.Info, message, null);

            logEvent.Properties[propertyName] = propertyValue;
 
            log.Logger.Log(logEvent);

Best Regards
Tomek
--
  Tomek Romanowski

 

 


From: Romanowski Tomasz [mailto:tomasz.romanowski@...]
Sent: Wednesday, September 16, 2009 1:32 PM
To: log4net-user@...
Subject: setting global, thread and event context properties

Hi !
 
 
I would like to log values set on different levels of context.
For global and thread context I managed to use Properties of these.
Then I wanted to log a value on event level.
The only way I figured out (I'm log4net beginner) was to use LoggingEvent:
 
This is how I log information:
 
        // global context
        const string AgentVersionKey = "AgentVersion";
        const string AgentIDKey = "AgentID";
        const string MACKey = "MAC";
        const string VolumeIDKey = "VolumeID";
        const string BIOSIDKey = "BIOSID";
        // thread context
        const string TTUserIDKey = "TTUserID";
        const string TTClientIDKey = "TTClientID";
        // event context
        const string CallOperKey = "CallOper";
        public static void LogInformation(string callingOperation, string info, params object[] args)
        {
            string message;
 
            message = String.Format(info, args);
            LoggingEvent logEvent;
            LoggingEventData logData;
 
            logData = new LoggingEventData();
            logData.TimeStamp = DateTime.Now;
           
            logData.Level = Level.Info;
            logData.Properties = new log4net.Util.PropertiesDictionary();
            logData.Properties[CallOperKey] = callingOperation;
            logData.Message = message;
 
            logEvent = new LoggingEvent(ThisDeclaringType, log.Logger.Repository, logData);
 
            log.Logger.Log(logEvent);
        }
 
while layout pattern is like this:
      <conversionPattern value=">>%date [%3thread] %-5level BIOSID:%property{BIOSID} VolumeID:%property{VolumeID} MAC:%property{MAC} Agent Ver.:%property{AgentVersion} Agent ID:%property{AgentID} User:%username TTUser:%-15property{TTUserID} TTClient:%-15property{TTClientID}%newline%property{CallOper} - %message%newline" />
 
My problem is, that when I'm logging code created event, I have null values for all non-event set properties, like BIOSID, MAC etc.
CallOper, which is the only property set on event, has right value.
Initially I just used log.Info to log information, and then all then BIOSID, MAC were present in logs.
 
What I'm doing wrong ?
 
BTW.
If I create loggingevent, then am I responsible for setting its call properties ? (I've noticed, that Timestamp was empty, that's why now I assign it in my code).
 
 

Best Regards
Tomek
--
  Tomek Romanowski