Log4net根据日志等级输出到不同文件
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!--添加自定义节点:log4net type:解析类名,程序集名(log4net.dll)-->
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<root>
<!--<level value="DEBUG"/>-->
<!--控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
<!--比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录-->
<level value="ALL"/>
<!--根据log级别记录到不同的日志文件-->
<appender-ref ref="ErrorLog" />
<appender-ref ref="InfoLog" />
</root>
<!--Error-->
<appender name="ErrorLog" type="log4net.Appender.RollingFileAppender">
<file value="Log/"/>
<appendToFile value="true" />
<rollingStyle value="Date" />
<!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->
<DatePattern value="yyyyMMdd"_Error.log"" />
<!--日志文件名是否为静态-->
<StaticLogFileName value="false"/>
<!--多线程时采用最小锁定-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!--布局(向用户显示最后经过格式化的输出信息)-->
<layout type="log4net.Layout.PatternLayout">
<ConversionPattern value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline" />
</layout>
<securityContext type="log4net.Util.WindowsSecurityContext">
<credentials value="Process" />
</securityContext>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ERROR" />
<levelMax value="ERROR" />
</filter>
</appender>
<!--Error--> <!--Info-->
<appender name="InfoLog" type="log4net.Appender.RollingFileAppender">
<!--定义文件存放位置-->
<file value="Log/"/>
<appendToFile value="true" />
<rollingStyle value="Date" />
<!--日志文件名是否为静态-->
<StaticLogFileName value="false"/>
<!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->
<DatePattern value="yyyyMMdd"_Info.log"" />
<!--多线程时采用最小锁定-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!--布局(向用户显示最后经过格式化的输出信息)-->
<layout type="log4net.Layout.PatternLayout">
<ConversionPattern value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline" />
</layout>
<securityContext type="log4net.Util.WindowsSecurityContext">
<credentials value="Process" />
</securityContext>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="INFO" />
<levelMax value="INFO" />
</filter>
</appender>
<!--Info-->
</log4net>
</configuration>
LogHelper:
using System;
using System.Collections.Concurrent;
using log4net; // 指定log4net使用的config文件来读取配置信息
[assembly: log4net.Config.XmlConfigurator(ConfigFile = @"Log4Net.config", Watch = true)]
namespace EnterpriseServer.Extensions
{
public class LogHelper
{
private static readonly ConcurrentDictionary<Type, ILog> Loggers = new ConcurrentDictionary<Type, ILog>(); /// <summary>
/// 获取记录器
/// </summary>
/// <param name="source">soruce</param>
/// <returns></returns>
private static ILog GetLogger(Type source)
{
if (Loggers.ContainsKey(source))
{
return Loggers[source];
}
else
{
ILog logger = LogManager.GetLogger(source);
Loggers.TryAdd(source, logger);
return logger;
}
} /* Log a message object */ /// <summary>
/// 调试信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
public static void Debug(object source, string message)
{
Debug(source.GetType(), message);
} /// <summary>
/// 调试信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
/// <param name="ps">ps</param>
public static void Debug(object source, string message, params object[] ps)
{
Debug(source.GetType(), string.Format(message, ps));
} /// <summary>
/// 调试信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
public static void Debug(Type source, string message)
{
ILog logger = GetLogger(source);
if (logger.IsDebugEnabled)
{
logger.Debug(message);
}
} /// <summary>
/// 关键信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
public static void Info(object source, object message)
{
Info(source.GetType(), message);
} /// <summary>
/// 关键信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
public static void Info(Type source, object message)
{
ILog logger = GetLogger(source);
if (logger.IsInfoEnabled)
{
logger.Info(message);
}
} /// <summary>
/// 警告信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
public static void Warn(object source, object message)
{
Warn(source.GetType(), message);
} /// <summary>
/// 警告信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
public static void Warn(Type source, object message)
{
ILog logger = GetLogger(source);
if (logger.IsWarnEnabled)
{
logger.Warn(message);
}
} /// <summary>
/// 错误信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
public static void Error(object source, object message)
{
Error(source.GetType(), message);
} /// <summary>
/// 错误信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
public static void Error(Type source, object message)
{
ILog logger = GetLogger(source);
if (logger.IsErrorEnabled)
{
logger.Error(message);
}
} /// <summary>
/// 失败信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
public static void Fatal(object source, object message)
{
Fatal(source.GetType(), message);
} /// <summary>
/// 失败信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
public static void Fatal(Type source, object message)
{
ILog logger = GetLogger(source);
if (logger.IsFatalEnabled)
{
logger.Fatal(message);
}
} /* Log a message object and exception */ /// <summary>
/// 调试信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
/// <param name="exception">ex</param>
public static void Debug(object source, object message, Exception exception)
{
Debug(source.GetType(), message, exception);
} /// <summary>
/// 调试信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
/// <param name="exception">ex</param>
public static void Debug(Type source, object message, Exception exception)
{
GetLogger(source).Debug(message, exception);
} /// <summary>
/// 关键信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
/// <param name="exception">ex</param>
public static void Info(object source, object message, Exception exception)
{
Info(source.GetType(), message, exception);
} /// <summary>
/// 关键信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
/// <param name="exception">ex</param>
public static void Info(Type source, object message, Exception exception)
{
GetLogger(source).Info(message, exception);
} /// <summary>
/// 警告信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
/// <param name="exception">ex</param>
public static void Warn(object source, object message, Exception exception)
{
Warn(source.GetType(), message, exception);
} /// <summary>
/// 警告信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
/// <param name="exception">ex</param>
public static void Warn(Type source, object message, Exception exception)
{
GetLogger(source).Warn(message, exception);
} /// <summary>
/// 错误信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
/// <param name="exception">ex</param>
public static void Error(object source, object message, Exception exception)
{
Error(source.GetType(), message, exception);
} /// <summary>
/// 错误信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
/// <param name="exception">ex</param>
public static void Error(Type source, object message, Exception exception)
{
GetLogger(source).Error(message, exception);
} /// <summary>
/// 失败信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
/// <param name="exception">ex</param>
public static void Fatal(object source, object message, Exception exception)
{
Fatal(source.GetType(), message, exception);
} /// <summary>
/// 失败信息
/// </summary>
/// <param name="source">source</param>
/// <param name="message">message</param>
/// <param name="exception">ex</param>
public static void Fatal(Type source, object message, Exception exception)
{
GetLogger(source).Fatal(message, exception);
}
}
}
Log4net根据日志等级输出到不同文件的更多相关文章
- C# Log4net根据日志等级输出到不同文件
原文地址: Log4Net.Config <?xml version="1.0" encoding="utf-8"?> <configurat ...
- Log4Net不同日志类型写入到不同文件
1. 一直在用log4net,从来没有自己整理过.实践出真知,只有自己整理过才能真正掌握. 2. log4net,应该读logfornet,以前一直说log4,log4............ 安装 ...
- Log4net 根据日志类型输出日志
第一步:引入Log4net.dll 文件的引用 第二步:添加LogHelper类,代码如下 using System; using System.Collections.Generic; using ...
- python日志等级输出删选
有时候我们会删选一下输出的信息 当做日志进行文件保存 但是我们程序中有可能有自己不想存到日志文件中的输出信息 我们要做一些的删选 然后进行保存 代码如下: #!/usr/bin/python # - ...
- log4j2按日志级别输出到指定文件
在项目中,可能会产生非常多的日志记录,为了方便日志分析,一般可以将日志按级别输出到指定文件,本次就先说说log4j2的实现吧: 1.先加入log4j2依赖包 2.写一个java类进行测试,类文件中仅仅 ...
- Linux下截取指定时间段日志并输出到指定文件
sed -n '/2019-04-22 16:10:/,/2019-04-22 16:20:/p' log.log > bbb.txt
- 【5】基于Log4Net的日志系统
阅读目录 日志系统应具备的特性 Log4Net 配置文件:log4net.config 初始化 输出信息 对Log4Net的封装 log4net.config复杂配置 不管是Web应用程序还是W ...
- C#中使用Log4net日志输出到本地文件、Textbox或Listview
网上很多配置log4net的方法,但是排行靠前的 根本就没有说明清除,导致浪费了两个小时来搞清楚如何配置,真是无语,特写此文,给那些刚接触log4net的朋友 1.参考链接:http://blog.s ...
- 使用log4net将日志文件输出为csv格式
我们在编写程序时,会在程序运行过程中记录一些日志.log4net作为一款经久耐用的日志组件,值得我们信赖.在中小型公司中,往往没有专业的日志服务器来处理应用程序产生的日志,而格式化不好的日志文件又为上 ...
随机推荐
- (转载)RxJava 与 Retrofit 结合的最佳实践
RxJava 与 Retrofit 结合的最佳实践 作者:tough1985 感谢 DaoCloud 为作者提供的 500 RMB 写作赞助: 成为赞助方 /开始写作 前言 RxJava和Retrof ...
- ASP.NET CORE读取appsettings.json的配置
如何在appsettings.json配置应用程序设置,微软给出的方法:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/config ...
- Findbugs分析工具介绍
Findbugs是一个静态分析工具,它检查类或者JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题.Findbugs自带检测器,其中有60余种Bad practice,80余种Correct ...
- otool -l 可执行文件结构
otool -l /Users/zzf073/Desktop/FqlMerchantX /Users/zzf073/Desktop/FqlMerchantX: Mach header magic cp ...
- Zbrush 4R7中的镜像功能是怎么使用的?
ZBrush一款3D图形绘制软件,功能十分强大,在雕刻建模的时候镜像工具是我们经常要用到的,它可以方便快捷雕刻对称的模型,那么ZBrush®中怎样镜像呢,本文小编将做详细介绍. ZBrush 3D镜像 ...
- 从U盘安装CentOS7.3教程(转载)
0.准备工作: 一台没系统的普通电脑u盘一个(大于1G,最小安装的话不超过1G,根据选择系统大小匹配U盘即可) CentOS7.3 iso文件一个UltraISO工具 1.制作U盘 ①使用UltraI ...
- 前端开发—CSS
CSS 基础概念 致命三问: 它是什么? 层叠样式表,主要作用是对html标签进行装饰. 它的作用:再 html 框架的基础上 ,对标签内容做美化工作. 注释方法:/*单行注释*/ 多行注释同理与h ...
- vue 函数配置项watch以及函数 $watch 源码分享
Vue双向榜单的原理 大家都知道Vue采用的是MVVM的设计模式,采用数据驱动实现双向绑定,不明白双向绑定原理的需要先补充双向绑定的知识,在watch的处理中将运用到Vue的双向榜单原理,所以 ...
- mysql 与 memcache 字段名后面有空格时会产生什么问题(转)
同事下午遇到一问题,MySQL 和 Memcached 对于同一个key,不能对应起来.最终原因是:PHP将key写入MySQL数据库之前,没有经过trim()过滤首尾空格(关键是尾部空格),结果: ...
- css+div 绘制多边形
/*1.正方形*/ <div id="square"></div> #square { width: 100px; height: 100px; backg ...