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. [转]关于负margin在页面中布局的应用

    本文转载自:http://www.cnblogs.com/jscode/archive/2012/08/28/2660078.html. 今天再写一个布局的时候用到一个margin-top是负值的情况 ...

  2. 如何显示隐藏的Administrator账户

    在Windows XP中,Administrator帐户是终极管理员,如果你创建了其他管理员帐户,那么该帐户就会从欢迎屏幕上被隐藏.这里需要注意的是,仅仅是从欢迎屏幕上被隐藏,该帐户仍然存在.   如 ...

  3. Unity使用 UnityVS+VS2013 调试脚本

    好消息:UnityVS免费啦 好消息:微软收购了UnityVS公司,UnityVS免费啦 下载地址:https://visualstudiogallery.msdn.microsoft.com/sit ...

  4. AutoIT简介

    AutoIT最初是为了帮助IT管理和维护而开发的工具,能自动完成软件的安装.由于自动化安装和自动化测试在功能需求上有许多相似之处,都要模拟用户对软件进行操作,并验证执行的结果,所以,AutoIT逐渐成 ...

  5. JMeter学习(六)集合点

    JMeter也有像LR中的集合点,本篇就来介绍下JMeter的集合点如何去实现. JMeter里面的集合点通过添加定时器来完成. 注意:集合点的位置一定要在Sample之前. 集合点:简单来理解一下, ...

  6. java 13-1 数组高级二分查找

    查找: 1.基本查找:数组元素无序(从头找到尾) 2.二分查找(折半查找):数组元素有序 pS:数组的元素必须有顺序,从小到大或者从大到小.以下的分析是从小到大的数组 二分查找分析: A:先对数组进行 ...

  7. 转 异常处理汇总 ~ 修正果带着你的Net飞奔吧!

    异常处理汇总 ~ 修正果带着你的Net飞奔吧!   异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 异常处理汇总-开发工具  h ...

  8. js文本框提示和自动完成

    1.模仿大型网站自动提示,就是输入“苹果”,在水果类中搜索,html代码如下: <div id="searchTips" style="display:none;w ...

  9. ubuntu中启用ssh服务

    ssh程序分为有客户端程序openssh-client和服务端程序openssh-server.如果需要ssh登陆到别的电脑,需要安装openssh-client,该程序ubuntu是默认安装的.而如 ...

  10. python socket发送魔法包网络唤醒开机.py

    python socket发送魔法包网络唤醒开机.py 现在的电脑应该都普遍支持有线网络的WOL了,支持无线网络唤醒的电脑,可能比较少. """ python socke ...