1、新建Logs的Class类;代码如下:

  public class ApiLogs
{
public static int Log_Level { get; set; }
private static bool initialized = false;
private static readonly ILog log = LogManager.GetLogger("ApiLogs");
static ApiLogs()
{
if (!initialized)
{
Initialize();
initialized = true;
}
}
private static void Initialize()
{ FileInfo fi = new FileInfo(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
if (fi.Exists)
{
XmlConfigurator.ConfigureAndWatch(fi);
}
if (!LogManager.GetRepository().Configured)
{
string filePath = (Path.Combine(Path.GetDirectoryName(new Uri(Assembly.GetCallingAssembly().GetName().CodeBase).LocalPath), "Carpa.config"));
fi = new FileInfo(filePath);
if (fi.Exists)
{
XmlConfigurator.ConfigureAndWatch(fi);
}
else
{
Trace.TraceWarning("配置文件 {0} 不存在", fi.FullName);
}
}
} /// <summary>
/// 调试输出
/// </summary>
/// <param name="message"></param>
public static void Debug(object message)
{
if (Log_Level >= )
{
log.Debug(message);
}
} /// <summary>
/// 调试输出
/// </summary>
/// <param name="message"></param>
/// <param name="exception"></param>
public static void Debug(object message, Exception exception)
{
if (Log_Level >= )
{
log.Debug(message, exception);
}
} /// <summary>
/// 格式化调试输出
/// </summary>
/// <param name="format"></param>
/// <param name="args"></param>
public static void DebugFormat(string format, params object[] args)
{
if (Log_Level >= )
{
log.DebugFormat(format, args);
}
} /// <summary>
/// 信息输出
/// </summary>
/// <param name="message"></param>
public static void Info(object message)
{
if (Log_Level >= )
{
log.Info(message);
}
} /// <summary>
/// 信息输出
/// </summary>
/// <param name="message"></param>
/// <param name="exception"></param>
public static void Info(object message, Exception exception)
{
if (Log_Level >= )
{
log.Info(message, exception);
}
} /// <summary>
/// 格式化信息输出
/// </summary>
/// <param name="format"></param>
/// <param name="args"></param>
public static void InfoFormat(string format, params object[] args)
{
if (Log_Level >= )
{
log.InfoFormat(format, args);
}
} /// <summary>
/// 警告输出
/// </summary>
/// <param name="message"></param>
public static void Warn(object message)
{
if (Log_Level >= )
{
log.Warn(message);
}
} /// <summary>
/// 警告输出
/// </summary>
/// <param name="message"></param>
/// <param name="exception"></param>
public static void Warn(object message, Exception exception)
{
if (Log_Level >= )
{
log.Warn(message, exception);
}
} /// <summary>
/// 格式化警告输出
/// </summary>
/// <param name="format"></param>
/// <param name="args"></param>
public static void WarnFormat(string format, params object[] args)
{
if (Log_Level >= )
{
log.WarnFormat(format, args);
}
} /// <summary>
/// 错误输出
/// </summary>
/// <param name="message"></param>
public static void Error(object message)
{
if (Log_Level >= )
{
log.Error(message);
}
} /// <summary>
/// 错误输出
/// </summary>
/// <param name="message"></param>
/// <param name="exception"></param>
public static void Error(object message, Exception exception)
{
if (Log_Level >= )
{
log.Error(message, exception);
}
} /// <summary>
/// 格式化错误输出
/// </summary>
/// <param name="format"></param>
/// <param name="args"></param>
public static void ErrorFormat(string format, params object[] args)
{
if (Log_Level >= )
{
log.ErrorFormat(format, args);
}
} /// <summary>
/// 致命输出
/// </summary>
/// <param name="message"></param>
public static void Fatal(object message)
{
log.Fatal(message);
} /// <summary>
/// 致命输出
/// </summary>
/// <param name="message"></param>
/// <param name="exception"></param>
public static void Fatal(object message, Exception exception)
{
log.Fatal(message, exception);
} /// <summary>
/// 格式化致命输出
/// </summary>
/// <param name="format"></param>
/// <param name="args"></param>
public static void FatalFormat(string format, params object[] args)
{
log.FatalFormat(format, args);
} /// <summary>
/// 是否启用调试输出
/// </summary>
public static bool IsDebugEnabled
{
get { return log.IsDebugEnabled; }
} /// <summary>
/// 是否启用信息输出
/// </summary>
public static bool IsInfoEnabled
{
get { return log.IsInfoEnabled; }
} /// <summary>
/// 是否启用信息输出
/// </summary>
public static bool IsWarnEnabled
{
get { return log.IsWarnEnabled; }
} /// <summary>
/// 是否启用错误输出
/// </summary>
public static bool IsErrorEnabled
{
get { return log.IsErrorEnabled; }
} /// <summary>
/// 是否启用致命输出
/// </summary>
public static bool IsFatalEnabled
{
get { return log.IsFatalEnabled; }
}
}

2、定义Log4net.config配制文件

<?xml version="1.0" encoding="gb2312" ?>
<configuration>
<configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler" />
</configSections> <log4net>
<appender name="DebugInfoAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="data\CarpaLog_Info.txt" />
<appendToFile value="true" />
<maximumFileSize value="1024KB"/>
<maxSizeRollBackups value=""/>
<CountDirection value=""/>
<RollingStyle value="Size"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline%date [%thread] %-5level - %message%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="DEBUG" />
<levelMax value="INFO" />
</filter>
</appender> <appender name="WarnErrorFatalAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="data\CarpaLog_Error.txt" />
<appendToFile value="true" />
<RollingStyle value="Date" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline%date [%thread] %-5level - %message%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="WARN" />
<levelMax value="FATAL" />
</filter>
</appender> <appender name="DebugAppender" type="Carpa.Logging.Appender.DebugAppender">
<layout type="Carpa.Logging.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %type - %message%newline" />
</layout>
</appender> <appender name="ApiInfoAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="data\ApiLog.txt" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<appendToFile value="true" />
<maximumFileSize value="5MB"/>
<maxSizeRollBackups value=""/>
<CountDirection value=""/>
<RollingStyle value="Size"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline%date [%thread] %-5level - %message%newline" />
</layout> <!--<filter type="log4net.Filter.LoggerMatchFilter">
<loggerToMatch value="ApiLogs" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />--> </appender> <logger name="ApiLogs">
<level value="ALL" />
<appender-ref ref="ApiInfoAppender" />
</logger>
<logger name="test.Logging.Log">
<level value="INFO" />
<appender-ref ref="FileAppender" />
<appender-ref ref="DebugInfoAppender" />
<appender-ref ref="WarnErrorFatalAppender" />
</logger>
</log4net>
</configuration>

核心说明:通过该类logManager.GetLogger("Name")的Name参数来区分,并定义配制文件中logger中name与Getlogger的Name名称一致

log4net将日志进行分类,保存到不同的目录当中的更多相关文章

  1. Log4net 根据日志类别保存到不同的文件,并按照日期生成不同文件名称

    <configuration> <configSections> <!--日志记录--> <section name="log4net" ...

  2. 【5】基于Log4Net的日志系统

    阅读目录 日志系统应具备的特性  Log4Net 配置文件:log4net.config 初始化 输出信息 对Log4Net的封装 log4net.config复杂配置   不管是Web应用程序还是W ...

  3. 【改进】用Log4net建立日志记录

    上一篇随笔中只使用了普通的文件读写来进行日志的写入,正如很多朋友说的,频繁的对文件进行读写会造成很多的问题,代码缺少边界控制和操作控制,没有对资源进行管理,是非常典型的bad code. 然后经过前辈 ...

  4. 利用StackExchange.Redis和Log4Net构建日志队列

    简介:本文是一个简单的demo用于展示利用StackExchange.Redis和Log4Net构建日志队列,为高并发日志处理提供一些思路. 0.先下载安装Redis服务,然后再服务列表里启动服务(R ...

  5. 使用Common.Logging+log4net规范日志管理【转载】

    使用Common.Logging+log4net规范日志管理   Common.Logging+(log4net/NLog/) common logging是一个通用日志接口,log4net是一个强大 ...

  6. StackExchange.Redis和Log4Net构建日志

    利用StackExchange.Redis和Log4Net构建日志队列   简介:本文是一个简单的demo用于展示利用StackExchange.Redis和Log4Net构建日志队列,为高并发日志处 ...

  7. log4net 添加自定义日志到数据库

    添加操作日志到数据库举例: (一)建立数据库的操作日志表,如下我建立了一个简单的日志表 (二)配置文件中的配置如下 <log4net> <!--错误日志记录数据库--> < ...

  8. ELK+FileBeat+Log4Net搭建日志系统

    ELK+FileBeat+Log4Net搭建日志系统 来源:https://www.zybuluo.com/muyanfeixiang/note/608470 标签(空格分隔): ELK Log4Ne ...

  9. (一)使用log4net生成日志文件

    1.引入log4net.dll 1.1 Nuget安装 或 http://logging.apache.org/log4net/下载log4net的源代码,编译后把log4net.dll引入项目. 2 ...

随机推荐

  1. A Personal Selection of Books on E lectromagnetics and Computational E lectromagnetics---David B. Davidson

    链接. General Books on Electromagnetics When our department recently reviewed our junior-level text, w ...

  2. 二分法 codevs 1432 总数统计

    codevs 1432 总数统计  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond   题目描述 Description 给出n个数,统计两两之和小于k的方 ...

  3. ZGrapher 画函数曲线图的工具

    可以下载个绿色版,我下载的是 ZGrapher 1.4 绿色版.下面先看下图出来的图: 然后可以在“file"->"Save as Picture ..." -&g ...

  4. mysql怎么查询前10条数据?

    mysql 没有top的用法.取而代之的是limit语法为:limit m,n省略n就可以得到你要的效果了. select * from table1 order by column desc  li ...

  5. brainfuck

    /阅读这样的代码就像在强奸你的大脑 #include<stdio.h> #include<ctype.h> #include<stdlib.h>  #include ...

  6. css3高级运动keyframes

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 过滤掉combobox里名称相同的选项

    var pname = ""; $('#PartName').combobox({ reload: url, formatter: function (row) {//过滤comb ...

  8. S2小测--索引--视图

    1.  关于Sql server 视图 视图是一个虚拟表,我们在查询视图的时候,实际上是对基础表的查询.视图不仅可以作为SELECT查询的目标,也可以作为修改语句的目 标.理论上它可以像普通的物理表一 ...

  9. Netty指定分隔的字符

    package org.zln.netty.five.part02; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; ...

  10. trac项目管理平台

    本文来自百科,由于是非Python开发者,所以仅为了拓宽知识面 1软件介绍 Trac是一个为软件开发项目需要而集成了Wiki和问题跟踪管理系统的应用平台,是一个开源软件应用.Trac以简单的方式建立了 ...