我安装网上的例子进行自定义Layout,在配置文件使用自定义layout,结果会生成日志文件,但是不保存日志信息,如果配置文件中使用PatternLayout ,就可以生产文件并保存日志信息,不知道问题出在哪里
//日志操作类
public class Log : ILog
{
log4net.ILog log = null;
public Log()
{
log4net.Config.XmlConfigurator.Configure((new System.IO.FileInfo(@"log4net.config")));
log = log4net.LogManager.GetLogger("RunningLayout");
}
public void WriteRunningLog(RunningLogItem item)
{
log.Info(item);
}
}
///自定义Layout
public class RunningLogPatternConvert: PatternLayoutConverter
{
public RunningLogPatternConvert()
{ }
protected override void Convert(TextWriter writer, LoggingEvent loggingEvent)
{
var RunningLog = loggingEvent.MessageObject as RunningLogItem;
if (RunningLog == null) return;
writer.Write(string.Format("ID:{0},[{1}],{2}:{3}", RunningLog.ID,RunningLog.LogType,RunningLog.CreateTime,RunningLog.Message));
}
}
public class RunningLogPatternLayout : PatternLayout
{
public RunningLogPatternLayout()
{
this.AddConverter("RunningLog", typeof(RunningLogPatternConvert));
}
}
//测试按钮
private void button1_Click(object sender, EventArgs e)
{
Udp.Log.Log log = new Udp.Log.Log();
RunningLogItem item = new RunningLogItem() { ID = 1, CreateTime = DateTime.Now, Message = "这是一条运行信息", LogType = "节点" };
log.WriteRunningLog(item);
}
log4net 的配置文件信息
<appender name="InfoLog" type="log4net.Appender.RollingFileAppender">
<!--目录路径,可以是相对路径或绝对路径-->
<param name="File" value="App_Data/Logs"/>
<!--文件名,按日期生成文件夹-->
<param name="DatePattern" value="/yyyy-MM-dd/'Info.log'"/>
<!--追加到文件-->
<appendToFile value="true"/>
<!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
<rollingStyle value="Composite"/>
<!--写到一个文件-->
<staticLogFileName value="false"/>
<!--单个文件大小。单位:KB|MB|GB-->
<maximumFileSize value="200MB"/>
<!--最多保留的文件数,设为"-1"则不限-->
<maxSizeRollBackups value="-1"/>
<!--日志格式-->
<layout type="Udp.Log.RunningLogPatternConvert">
<conversionPattern value="%RunningLog %n"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="INFO" />
</filter>
</appender>