Sì - è possibile ottenere queste informazioni dello stack utilizzando i seguenti modelli in un modello di layout:
%type %file %line %method %location %class
Vedere la documentazione this sul PatternLayout per ulteriori informazioni.
Modifica in risposta al commento di Ian di seguito: Io non credo log4net può essere configurato per scrivere l'intero stack.
È sempre possibile tornare a scrivere da solo, utilizzando qualcosa come new StackTrace().ToString()
, ma sto indovinando il motivo che si chiede è che si desidera che questo sia configurabile nella configurazione di registrazione.
Avrò un aspetto più profondo, ma il mio istinto è che non c'è modo di configurarlo e che si finirebbe per dover implementare la propria classe di layout.
Modifica ++ OK - qui è una classe modello di layout personalizzato che deriva dalla PatternLayout
ma aggiunge in una pila% layout.
Questo codice è un po 'approssimativo - solo illustrativo - non è pronto per la produzione! (Per esempio, non si può avere l'autorizzazione di sicurezza per accedere alla pila si sta tentando di stampa)
public class CustomPatternLayout : PatternLayout
{
public CustomPatternLayout()
{
this.AddConverter("stack", typeof(StackTraceConverter));
}
}
public class StackTraceConverter : PatternLayoutConverter
{
protected override void Convert(TextWriter writer, LoggingEvent loggingEvent)
{
var stack = new StackTrace();
var frames = stack.GetFrames();
for (var i = 0; i < frames.Length; i++)
{
var frame = frames[i];
// if the stack frame corresponds to still being inside the log4net assembly, skip it.
if (frame.GetMethod().DeclaringType.Assembly != typeof(LogManager).Assembly)
{
writer.WriteLine("{0}.{1} line {2}",
frame.GetMethod().DeclaringType.FullName,
frame.GetMethod().Name,
frame.GetFileLineNumber());
}
}
}
}
È quindi possibile configurare questo con la seguente configurazione modello (% pila nota alla fine del layout):
<layout type="ScratchPad.CustomPatternLayout,ScratchPad">
<conversionPattern value="%date %-5level %message%newline %type %file %line %method %location %class %stack" />
</layout>
fonte
2009-12-15 09:45:18
Non è il metodo log4net Errore (stringa, Eccezione) sufficiente per Questo? – CodeMonkeyKing
@CodeMonkeyKing - Penso che l'OP stia dicendo che vuole registrare la traccia dello stack in alcuni scenari in cui non ha un'eccezione. –