log4net将日志进行分类,保存到不同的目录当中
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将日志进行分类,保存到不同的目录当中的更多相关文章
- Log4net 根据日志类别保存到不同的文件,并按照日期生成不同文件名称
<configuration> <configSections> <!--日志记录--> <section name="log4net" ...
- 【5】基于Log4Net的日志系统
阅读目录 日志系统应具备的特性 Log4Net 配置文件:log4net.config 初始化 输出信息 对Log4Net的封装 log4net.config复杂配置 不管是Web应用程序还是W ...
- 【改进】用Log4net建立日志记录
上一篇随笔中只使用了普通的文件读写来进行日志的写入,正如很多朋友说的,频繁的对文件进行读写会造成很多的问题,代码缺少边界控制和操作控制,没有对资源进行管理,是非常典型的bad code. 然后经过前辈 ...
- 利用StackExchange.Redis和Log4Net构建日志队列
简介:本文是一个简单的demo用于展示利用StackExchange.Redis和Log4Net构建日志队列,为高并发日志处理提供一些思路. 0.先下载安装Redis服务,然后再服务列表里启动服务(R ...
- 使用Common.Logging+log4net规范日志管理【转载】
使用Common.Logging+log4net规范日志管理 Common.Logging+(log4net/NLog/) common logging是一个通用日志接口,log4net是一个强大 ...
- StackExchange.Redis和Log4Net构建日志
利用StackExchange.Redis和Log4Net构建日志队列 简介:本文是一个简单的demo用于展示利用StackExchange.Redis和Log4Net构建日志队列,为高并发日志处 ...
- log4net 添加自定义日志到数据库
添加操作日志到数据库举例: (一)建立数据库的操作日志表,如下我建立了一个简单的日志表 (二)配置文件中的配置如下 <log4net> <!--错误日志记录数据库--> < ...
- ELK+FileBeat+Log4Net搭建日志系统
ELK+FileBeat+Log4Net搭建日志系统 来源:https://www.zybuluo.com/muyanfeixiang/note/608470 标签(空格分隔): ELK Log4Ne ...
- (一)使用log4net生成日志文件
1.引入log4net.dll 1.1 Nuget安装 或 http://logging.apache.org/log4net/下载log4net的源代码,编译后把log4net.dll引入项目. 2 ...
随机推荐
- Web安全--XSS现代WAF规则探测及绕过技术
XSS现代WAF规则探测及绕过技术初始测试 1.使用无害的payload,类似<b>,<i>,<u>观察响应,判断应用程序是否被HTML编码,是否标签被过滤,是否过 ...
- 【软件使用】用IntelliJ IDEA开发Android程序图解
博主这里使用的最新的14.0.3版本,下载地址:http://www.jetbrains.com/idea/, 下载后直接安装就可以了. 环境: OS:Win 8 IDE:IntelliJ IDEA ...
- 『转载』使用TortoiseSVN客户端
原文地址:https://www.sinacloud.com/doc/sae/tutorial/code-deploy.html#shi-yong-git-ke-hu-duan TortoiseSVN ...
- Ajax类库需要注意的问题
构建Ajax类库时,注意四步就可以了: 1:创建Ajax 对象 2:链接服务器 3:发送请求 4:返回响应 下面是我自己写的一个Ajax类库: function ajax(url,fnn,fai) ...
- Renderer.materials
修改方法 meshBody.renderer.materials[].mainTexture= clothes[]; meshBody.renderer.materials[]=maters[]; 以 ...
- Fitnesse初体验
FitNesse是一套软件开发协作工具 FitNesse是帮助大家加强软件开发过程中的协作的工具.能够让客户.测试人员和开发人员了解软件要做成什么样,帮助建议软件最终是否达到了设计初衷. 什么是Fit ...
- 如何等到所有的图片都加载完成之后触发一次onload事件
var details_img = $(".details img"); //所有的图片 var img_len = details_img.length; details_img ...
- 【转】【UML】使用Visual Studio 2010 Team System中的架构师工具(设计与建模)
Lab 1: 应用程序建模 实验目标 这个实验的目的是展示如何在Visual Studio 2010旗舰版中进行应用程序建模.团队中的架构师会通过建模确定应用程序是否满足客户的需求. 你可以创建不同级 ...
- 静态时序分析(static timing analysis)
静态时序分析(static timing analysis,STA)会检测所有可能的路径来查找设计中是否存在时序违规(timing violation).但STA只会去分析合适的时序,而不去管逻辑操作 ...
- 如何在 kernel 和 hal 层读取同一个标志
很多时候我们需要从 HAL 层(Hardware Abstract Layer)传一个标志给 kernel 层.一般这种传递是不能直接通过定义全局变量来实现的. 此时可以通过读写文件来实现该标志. 譬 ...