c# 自定义log4net过滤器
有时候为了实现自己想要的多个日志文件记录不同的内容,可能需要自定义log4net过滤器,比如我这里需要记录三个文件,这三个文件的内容又不能重复,多次尝试未果。
为了不更改任何现有日志代码的情况下,于是自定了过滤器。
<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="10"/>
<param name="StaticLogFileName" value="false"/>
<param name="DatePattern" value="yyyy-MM-dd".log""/>
<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="10"/>
<param name="StaticLogFileName" value="false"/>
<param name="DatePattern" value="yyyy-MM-dd"_SubmitStudentCode.log""/>
<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="10"/>
<param name="StaticLogFileName" value="false"/>
<param name="DatePattern" value="yyyy-MM-dd"_UserAction.log""/>
<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>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using log4net.Filter;
using log4net.Core; namespace FirsteElite.Model.Model.Log
{
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; }
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using log4net.Filter;
using log4net.Core; namespace FirsteElite.Model.Model.Log
{
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; }
}
}
}
public static class UserActionLogger
{
static ILog userActionLogger = log4net.LogManager.GetLogger("UserAction"); public static void log(string msg)
{
userActionLogger.Logger.Log(null, new log4net.Core.Level(, "UserAction"), msg, null);
}
}
c# 自定义log4net过滤器的更多相关文章
- 实现MVC自定义过滤器,自定义Area过滤器,自定义Controller,Action甚至是ViewData过滤器
MVC开发中几种以AOP方式实现的Filters是非常好用的,默认情况下,我们通过App_Start中的FilterConfig来实现的过滤器注册是全局的,也就是整个应用程序都会使用的,针对单独的Fi ...
- 自定义jinja2 过滤器
今天,我们要讲的是自定义jinja2 过滤器这个知识点,因为官方文档对此一代而过,讲得不够清楚,所以我们专门拿出来讲一下. 例子 例子写了两个自定义过滤器,一个是转换字典到字符串的过滤器,一个是返回当 ...
- java学习笔记(2):获取文件名和自定义文件过滤器
//自定义文件过滤器import java.io.File; import javax.swing.filechooser.*; public class JavaChooser extends Fi ...
- MVC自定义过滤器,自定义Area过滤器,自定义Controller,Action甚至是ViewData过滤器
实现MVC自定义过滤器,自定义Area过滤器,自定义Controller,Action甚至是ViewData过滤器 MVC开发中几种以AOP方式实现的Filters是非常好用的,默认情况下,我们通过A ...
- [C#].Net Core下全局自定义身份过滤器使用AllowAnonymous属性
假设一种情况:项目中需要做认证和权限控制,而且需要权限才能访问的控制器要远多于可以匿名访问的(类似AO系统那样,登陆了才能用). 那在每个控制器上加一个 [Authorize] 是能解决问题,反正正我 ...
- ASP.NET Core中使用自定义MVC过滤器属性的依赖注入
除了将自己的中间件添加到ASP.NET MVC Core应用程序管道之外,您还可以使用自定义MVC过滤器属性来控制响应,并有选择地将它们应用于整个控制器或控制器操作. ASP.NET Core中常用的 ...
- django -使用jinja2模板引擎 自定义的过滤器
setting.py中 TEMPLATES = [ { 'BACKEND': 'django.template.backends.jinja2.Jinja2', 'DIRS': [os.path.jo ...
- day058 聚合 分组查询 自定义标签过滤器 外部调用django环境 事务和锁
1.聚合(aggregate) 聚合的主要语法: from django.db.models import Avg , Max , Min , Count models.类名 .objects.all ...
- Django框架之【自定义模板过滤器与标签】
本文在我的微信公众号的链接:https://mp.weixin.qq.com/s?__biz=MzU5NTU5MjcwNw==&mid=2247483674&idx=1&sn= ...
随机推荐
- day14-python异常处理
1. 异常 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行. 一般情况下,在Python无法正常处理程序时就会发生一个异常.异常是Python对象,表示一个错误.当Pyt ...
- day28 黏包及黏包解决方案
今日主要内容: 一 .缓冲区 二.两种黏包现象 三.黏包现象的两种解决方案 四.打印进度条(补充的,了解即可) 1. 缓冲区 缓冲区的作用 : 将程序和网络解耦(这样做的好处是程序不会以为网速的快慢而 ...
- 每天CSS学习之letter-spacing
letter-spacing是CSS的一个属性,其作用是设置字符之间的距离.letter意为字符. 1.normal:规定字符之间没有额外的空间.该值是默认值.如下示例: p{ letter-spac ...
- 【转】MySQL实现Oracle里的 rank()over(ORDER BY) 功能
Oracle rank()和dense_rank()的区别是: –rank()是跳跃排序,有两个第二名时接下来就是第四名 –dense_rank()l是连续排序,有两个第二名时仍然跟着第三名 sele ...
- 软件设计基础-C/S系统
在软件设计开发过程中,逐渐形成了一些针对特定应用领域的软件系统组织方式的惯用模式 如经典的C/S(client/server,客户/服务器)模式和B/S(browser/server,浏览器/服务器) ...
- SQL-35 对于表actor批量插入如下数据,如果数据已经存在,请忽略,不使用replace操作
题目描述 对于表actor批量插入如下数据,如果数据已经存在,请忽略,不使用replace操作CREATE TABLE IF NOT EXISTS actor (actor_id smallint(5 ...
- springboot学习章节-spring常用配置
1.Scope package com.zhen.highlights_spring4.ch2.scope; import org.springframework.context.annotation ...
- springMVC拦截css与js等资源文件的解决
写了一个demo的ssm,使用jetty容器跑的,但是在页面的时候总是发现访问资源出现404. 换了多种写法不见效. 偶然发现日志中请求被springMVC拦截了,气死我了. 解决方式: Spring ...
- netty源码理解补充 之 DefaultChannelPipeline到底是个啥
- wait_activity
wait_activity(self, activity, timeout, interval=1): android特有的 返回的True 或 False :Agrs: - activity - 需 ...