程序中原来只记录一个日志,现在我要写一个用户操作日志,需要与原来的日志分开,在config文件中一阵折腾无果(要么写不全,要么写重了,反正没办法完美分离,要么与现存代码没办法完美兼容),差点放弃准备自己直接写txt文件了。

在网上看到可以写自定义filter,可以and可以or,那还有什么事情是搞不定的呢? 代码比较简单,不解释。

public class AndFilter : FilterSkeleton
{
private bool acceptOnMatch;
private readonly IList<IFilter> filters = new List<IFilter>(); public override FilterDecision Decide(LoggingEvent loggingEvent)
{
if (loggingEvent == null)
throw new ArgumentNullException("loggingEvent"); foreach (IFilter filter in filters)
{
if (filter.Decide(loggingEvent) != FilterDecision.Accept)
return FilterDecision.Neutral; // one of the filter has failed
} return FilterDecision.Accept;
} public IFilter Filter
{
set { filters.Add(value); }
} public bool AcceptOnMatch
{
get { return acceptOnMatch; }
set { acceptOnMatch = value; }
}
} public class OrFilter : FilterSkeleton
{
private bool acceptOnMatch;
private readonly IList<IFilter> filters = new List<IFilter>(); public override FilterDecision Decide(LoggingEvent loggingEvent)
{
if (loggingEvent == null)
throw new ArgumentNullException("loggingEvent"); foreach (IFilter filter in filters)
{
if (filter.Decide(loggingEvent) == FilterDecision.Accept)
return FilterDecision.Accept;
} return FilterDecision.Deny;
} public IFilter Filter
{
set { filters.Add(value); }
} public bool AcceptOnMatch
{
get { return acceptOnMatch; }
set { acceptOnMatch = value; }
}
}
    <log4net>
<root name="Default">
<level value="All" />
<appender-ref ref="FileAppender"/>
</root>
<logger name="SubmitStudentCode">
<level value="SubmitStudentCode" />
<appender-ref ref="FileAppender.SubmitStudentCode" />
</logger>
<logger name="UserAction">
<level value="UserAction" />
<appender-ref ref="FileAppender.UserAction" />
</logger>
<appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log/"/>
<param name="AppendToFile" value="true"/>
<param name="MaxSizeRollBackups" value=""/>
<param name="StaticLogFileName" value="false"/>
<param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;"/>
<param name="RollingStyle" value="Date"/>
<layout type="log4net.Layout.PatternLayout">
<param name="Header" value="----------------------------------------[Header]-------------------------------------- "/>
<param name="Footer" value="----------------------------------------[Footer]-------------------------------------- "/>
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n%n"/>
</layout>
<filter type="FirsteElite.Model.Model.Log.OrFilter">
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="INFO" />
</filter>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="WARN" />
<levelMax value="FATAL" />
</filter>
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
<appender name="FileAppender.SubmitStudentCode" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log/" />
<param name="AppendToFile" value="true"/>
<param name="MaxSizeRollBackups" value=""/>
<param name="StaticLogFileName" value="false"/>
<param name="DatePattern" value="yyyy-MM-dd&quot;_SubmitStudentCode.log&quot;"/>
<param name="RollingStyle" value="Date"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d %m%n"/>
</layout>
<filter type="log4net.Filter.LoggerMatchFilter">
<param name="LoggerToMatch" value="SubmitStudentCode" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
<appender name="FileAppender.UserAction" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log/"/>
<param name="AppendToFile" value="true"/>
<param name="MaxSizeRollBackups" value=""/>
<param name="StaticLogFileName" value="false"/>
<param name="DatePattern" value="yyyy-MM-dd&quot;_UserAction.log&quot;"/>
<param name="RollingStyle" value="Date"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d %m%n"/>
</layout>
<filter type="log4net.Filter.LoggerMatchFilter">
<param name="LoggerToMatch" value="UserAction" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender> </log4net>
public partial class Test : System.Web.UI.Page
{
static ILog log = log4net.LogManager.GetLogger(typeof(Test));
static ILog logForSubmitStudentCode = log4net.LogManager.GetLogger("SubmitStudentCode");
static ILog logForUserAction = log4net.LogManager.GetLogger("UserAction"); protected void Page_Load(object sender, EventArgs e)
{
log.Fatal("Fatal");
log.Error("Error");
log.Warn("Warn");
log.Info("info");
logForSubmitStudentCode.Logger.Log(typeof(Test), new log4net.Core.Level(, "SubmitStudentCode"), "SubmitStudentCode test", null);
logForUserAction.Logger.Log(typeof(Test), new log4net.Core.Level(, "UserAction"), "UserAction test", null);
}
}

最新文章

  1. Linux下mongodb安装
  2. Android 动画之RotateAnimation应用详解
  3. 0603 python 基础02
  4. matlab中选择图片路径
  5. c++中,int *a=new int(120)语句的意思
  6. 从 Vue 1.x 迁移 — Vue.js
  7. python学习之元组与文件
  8. JAVA 调用mysql存储过程
  9. Do-Now—团队Scrum 冲刺博客五
  10. c/c++ 图相关的函数(二维数组法)
  11. 乾坤合一~Linux设备驱动之终端设备驱动
  12. Jenkins设置备份
  13. js中parentNode,parentElement,childNodes,children
  14. 基于QT和OpenCV的人脸检測识别系统(2)
  15. 软件设计模式之代理模式(JAVA)
  16. NVME SSD vs SATA SSD(转)
  17. docker 数据管理数据卷
  18. yum的使用
  19. 【VBA编程】07.循环结构语句
  20. jwPlayer读取本地视频及相关配置(Tomcat配置虚拟目录)

热门文章

  1. 【转】caffe数据层及参数
  2. vue-router-8-路由组件传参
  3. linux文件查看
  4. 第二篇 界面开发 (Android学习笔记)
  5. [Leetcode 44]通配符匹配Wildcard Matching
  6. 不管你是否已经准备面试, 这45道Python面试题都对你非常有帮助!(mark!)
  7. Vuejs2.0学习(Render函数,createElement,vm.$slots)
  8. Map.putAll()用法
  9. slaac
  10. nodejs的express框架(request,response方法汇总)