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. Web安全--XSS现代WAF规则探测及绕过技术

    XSS现代WAF规则探测及绕过技术初始测试 1.使用无害的payload,类似<b>,<i>,<u>观察响应,判断应用程序是否被HTML编码,是否标签被过滤,是否过 ...

  2. 【软件使用】用IntelliJ IDEA开发Android程序图解

    博主这里使用的最新的14.0.3版本,下载地址:http://www.jetbrains.com/idea/, 下载后直接安装就可以了. 环境: OS:Win 8 IDE:IntelliJ IDEA ...

  3. 『转载』使用TortoiseSVN客户端

    原文地址:https://www.sinacloud.com/doc/sae/tutorial/code-deploy.html#shi-yong-git-ke-hu-duan TortoiseSVN ...

  4. Ajax类库需要注意的问题

    构建Ajax类库时,注意四步就可以了: 1:创建Ajax  对象 2:链接服务器 3:发送请求 4:返回响应 下面是我自己写的一个Ajax类库: function ajax(url,fnn,fai) ...

  5. Renderer.materials

    修改方法 meshBody.renderer.materials[].mainTexture= clothes[]; meshBody.renderer.materials[]=maters[]; 以 ...

  6. Fitnesse初体验

    FitNesse是一套软件开发协作工具 FitNesse是帮助大家加强软件开发过程中的协作的工具.能够让客户.测试人员和开发人员了解软件要做成什么样,帮助建议软件最终是否达到了设计初衷. 什么是Fit ...

  7. 如何等到所有的图片都加载完成之后触发一次onload事件

    var details_img = $(".details img"); //所有的图片 var img_len = details_img.length; details_img ...

  8. 【转】【UML】使用Visual Studio 2010 Team System中的架构师工具(设计与建模)

    Lab 1: 应用程序建模 实验目标 这个实验的目的是展示如何在Visual Studio 2010旗舰版中进行应用程序建模.团队中的架构师会通过建模确定应用程序是否满足客户的需求. 你可以创建不同级 ...

  9. 静态时序分析(static timing analysis)

    静态时序分析(static timing analysis,STA)会检测所有可能的路径来查找设计中是否存在时序违规(timing violation).但STA只会去分析合适的时序,而不去管逻辑操作 ...

  10. 如何在 kernel 和 hal 层读取同一个标志

    很多时候我们需要从 HAL 层(Hardware Abstract Layer)传一个标志给 kernel 层.一般这种传递是不能直接通过定义全局变量来实现的. 此时可以通过读写文件来实现该标志. 譬 ...