Comment Ajouter des propriétés personnalisées dans AppenderSkeleton log4net
Je Créer des Appender(avec AppenderSkeleton) qui se connectent au Web Service... dans ce Appender j'ai besoin d'envoyer certaines propriétés personnalisées(comme l'Url , le Navigateur de l'Utilisateur , ...) au Service web...
mais quand j'ai ajouter ces propriétés comme :
ThreadContext.Properties["addr"] = System.Web.HttpContext.Current.Request.UserHostAddress;
dans mon appender que comme ceci :
public class UrlLogAppender : AppenderSkeleton
{
public string APIkey { get; set; }
public string CustomerName { get; set; }
protected override void Append(LoggingEvent loggingEvent)
{
try
{
Base.LogToDataBase.WebService1 LogtoWebserver = new Base.LogToDataBase.WebService1();
string Result = LogtoWebserver.Log(CustomerName, APIkey, loggingEvent.TimeStamp.ToString(), loggingEvent.ThreadName.ToString(), loggingEvent.Level.ToString(), loggingEvent.LoggerName, loggingEvent.RenderedMessage, loggingEvent.ExceptionObject.InnerException.Message.ToString(), loggingEvent.Properties["addr"].ToString(), loggingEvent.Properties["browser"].ToString(), loggingEvent.Properties["url"].ToString());
if (Result != "UnSucced!!")
{
//Say Excellent.... !
}
else
{
//Say Opps....!!
}
}
catch (Exception ex)
{
throw new ApplicationException("An error occured while invoking the Logging REST API", ex);
}
}
public UrlLogAppender()
{
//
//TODO: Add constructor logic here
//
}
}
}`
je ne peut pas attraper les propriétés que j'ai ajouté et rempli avant(**loggingEvent.Properties["browser"].ToString()**
?!?!?!!?)
de mon site Web.Config comme ceci :
<appender name="UrlAppender" type="log4net.Extensions.UrlLogAppender">
<threshold value="ALL"/>
<CallingApp value="Base" />
<datePattern value="_yyyy-MM-dd.lo'g'"/>
<APIkey value="321" />
<CustomerName value="Kanon" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%date User:%identity IP:%X{addr} Browser: %X{browser} Url: %X{url} [%thread] %-5level %c:%m%n"/>
</layout>
</appender>
s'il vous plaît Aidez-moi !
Vous devez vous connecter pour publier un commentaire.
Vous avez deux possibilités pour accéder à des propriétés que vous avez configuré dans votre fichier XML. Si vous avez une config comme ceci:
Votre Appender classe peut ressembler à ceci:
Vous pouvez soit spécifier une propriété publique avec le même nom que l'élément XML à partir du fichier de config, ou de fournir une méthode publique qui prend exactement un argument (la valeur de l'élément XML) et est nommé comme
Add<name of XML element>
. log4net recherche pour l'un de ces dans votre appender classe (le cas est invariant) et de les appeler lorsque l'appender est initialisé.Activator.CreateInstance(appenderType)
pour instancier l'appender. Et il utilise le constructeur par défaut.Enfin je l'ai trouvé..... 🙂
Je dois mettre cette ligne dans MyAppender(UrlAppender) :
et pour l'utiliser :
Je pense que vous devrez peut-être créer des AppenderParameters de sorte qu'ils peuvent être mappées par les valeurs que vous utilisez dans le PatternLayout. Jetez un oeil à cette exemple - essayez d'ajouter d'un seul paramètre, puis ajouter le reste si vous avez réussi. Aussi, essayez de basculer sur log4net propre traçage - il peut vous aider à identifier les zones à problème.