你PatternConverter方式是朝着正确的方向迈出了一步,尽管使用了静态的输入和输出属性所有有点不稳定(线程安全明智)。
这里的技巧是要认识到logger.Debug(...)上的消息参数是对象,并且您可以传入任何您喜欢的东西。
你可以自定义一个消息类型
public class InputOutput
{
public string Input {get;set;}
public string Output {get;set;}
}
,然后让你的转换器读取这两种属性
public class InputPatternConverter : PatternConverter
{
protected override void Convert(System.IO.TextWriter writer, object state)
{
var msg = ((LoggingEvent)state).MessageObject as InputOutput;
if (msg != null)
writer.Write(msg.Input);
}
}
public class OutputPatternConverter : PatternConverter
{
protected override void Convert(System.IO.TextWriter writer, object state)
{
var msg = ((LoggingEvent)state).MessageObject as InputOutput;
if (msg != null)
writer.Write(msg.Output);
}
}
记录,然后变得更加清洁
logger.Debug(new InputOutput { Input = ..., Output = ...});
你的配置是一样。
一个提示虽然是子类化PatternLayout并添加转换器在该类的构造函数。这样你也可以减少你的配置。这将而不是导致您丢失%消息令牌,您的%输入和%输出令牌将附加到PatternLayout支持的所有令牌。所以,你实际上可以有这样一个规律:
"%date %message %newline%newline %input %newline%newline %output
这里有一个快速的实现自定义的模式布局:
public class InputOutputPatternLayout : PatternLayout
{
public InputOutputPatternLayout()
{
AddConverter("input", typeof(InputPatternConverter));
AddConverter("output", typeof(OutputPatternConverter));
}
}
要使使用较少冗余,您可以将此作为ILogger接口的扩展方法来实现两个参数。然后用法如下:logger.Debug(input,output); – 2009-05-26 09:28:53