using log4net;
using log4net.Appender;
using log4net.Config;
using log4net.Core;
using log4net.Layout;
using System;
using System.IO;
using System.Web; namespace Utility
{
/// <summary>
/// 简单封装log4net基本功能
/// 1 无论log4net.config文件是否存在,都可以正常使用log4net.dll记录日志
/// 2 支持两种类型的logger:SystemLogger和DatabaseLogger,还可以添加更多的logger对象
/// </summary>
public class Logger
{
private static readonly Type declaringType = typeof(Logger); protected static ILog SystemLog
{
get;
private set;
} protected static ILog DatabaseLog
{
get;
private set;
} static Logger()
{
const string fileName = "log4net.config";
string basePath = HttpContext.Current != null
? AppDomain.CurrentDomain.SetupInformation.PrivateBinPath
: AppDomain.CurrentDomain.BaseDirectory;
string filePath = Path.Combine(basePath, fileName); if (File.Exists(filePath))
{
XmlConfigurator.ConfigureAndWatch(new FileInfo(filePath));
}
else
{
//默认设置(log4net 按装饰器模式实现,支持:ConsoleLog、FileLog、EventLog等不同方式)
RollingFileAppender appender = new RollingFileAppender
{
Name = "root",
File = "logs\\log.txt",
AppendToFile = true,
RollingStyle = RollingFileAppender.RollingMode.Composite, //日期发生变化或日志文件大小超过10M,自动生成新的日志文件
DatePattern = "yyyyMMdd\".txt\"", //如果日期发了变化,自动保存历史日志文件,并生成新的日志文件
MaxSizeRollBackups = , //保留几个历史日志文件
Layout = new PatternLayout("[%d{yyyy-MM-dd HH:mm:ss.fff}] [%t] %-5level %logger property:[%property{NDC}] - %message%newline") //%m表示日志内容
}; BasicConfigurator.Configure(appender);
appender.ActivateOptions();
} //为log4net添加不同类型的参数logger,用于配置选择哪种方式输出日志
SystemLog = LogManager.GetLogger("SystemLogger"); //返回或新建一个命名的logger对象
DatabaseLog = LogManager.GetLogger("DatabaseLogger");
} private static void WriteLog(ILog log, Level level, Exception exception, string message)
{
log.Logger.Log(declaringType, level, message, exception);
} #region 装饰器>>系统日志 public static void Debug(string message, Exception exception = null)
{
WriteLog(SystemLog, Level.Debug, exception, message);
} public static void Info(string message, Exception exception = null)
{
WriteLog(SystemLog, Level.Info, exception, message);
} public static void Warn(string message, Exception exception = null)
{
WriteLog(SystemLog, Level.Warn, exception, message);
} public static void Error(string message, Exception exception = null)
{
WriteLog(SystemLog, Level.Error, exception, message);
} public static void Fatal(string message, Exception exception = null)
{
WriteLog(SystemLog, Level.Fatal, exception, message);
} #endregion #region 装饰器>>数据库日志 public static void DatabaseInfo(string message, Exception exception = null)
{
WriteLog(DatabaseLog, Level.Info, exception, message);
} public static void DatabaseWarn(string message, Exception exception = null)
{
WriteLog(DatabaseLog, Level.Warn, exception, message);
} public static void DatabaseError(string message, Exception exception = null)
{
WriteLog(DatabaseLog, Level.Error, exception, message);
} #endregion
}
}

log4net 简易封装的更多相关文章

  1. 面localStorage用作数据缓存的简易封装

    面localStorage用作数据缓存的简易封装 最近做了一些前端控件的封装,需要用到数据本地存储,开始采用cookie,发现很容易就超过了cookie的容量限制,于是改用localStorage,但 ...

  2. log4net使用封装,无缝切换 dotnet 和 dotnetcore

    log4net使用封装,无缝切换 dotnet 和 dotnetcore Intro 自己有几个自己的小项目,有许多公用的方法/扩展/工具类等等,于是封装了一些常用的工具类/扩展方法 WeihanLi ...

  3. UITextField的简易封装

    UITextField的简易封装 效果 源码 https://github.com/YouXianMing/UI-Component-Collection 中的 UITextFieldView // ...

  4. AVAudioPlayer简易封装

    AVAudioPlayer简易封装 [说明] AVAudioPlayer简易封装,仅仅支持播放,暂停,停止,暂停时候带有渐隐效果,自己用,没有参考价值. [源码] https://github.com ...

  5. 对xlslib库与libxls库的简易封装

    一.简介 xlslib库是用来创建excel文件.libxls是用来读取excel文件的,在使用C++或者QT语言来设计对excel文件的读取.都需要事先下载这两个库编译成功后再进行程序设计的.之所以 ...

  6. node.js + mssql 简易封装操作

    时间吧,总是这么凑巧,在我学习[node.js]还没几天,我的 Microsoft SQL Server Management Studio 18 就歇菜了,至于怎么歇菜的吧....它可能的意思就是想 ...

  7. 基于Vue简易封装的快速构建Echarts组件 -- fx67llQuickEcharts

    fx67llQuickEcharts A tool to help you use Echarts quickly! npm 组件说明 这本来是一个测试如何发布Vue组件至npm库的测试项目 做完之后 ...

  8. jQuery版AJAX简易封装

    开发过程中,AJAX的应用应该说非常频繁,当然,jQuery的AJAX函数已经非常好用,但是小编还是稍微整理下,方便不同需求下,可以简化输入参数,下面是实例代码: $(function(){ /** ...

  9. 页面localStorage用作数据缓存的简易封装

    最近做了一些前端控件的封装,需要用到数据本地存储,开始采用cookie,发现很容易就超过了cookie的容量限制,于是改用localStorage,但localStorage过于简单,没有任何管理和限 ...

随机推荐

  1. Servlet开发(2)

    Jsp&Servlet用户登录功能实现(采用MVC模式) 我们使用Jsp&Servlet开发一个用户登录功能的小项目(麻雀大小,但是五脏俱全呦,关键是技术问题!). 数据库:mysql ...

  2. Eclipse-Java代码规范和质量检查插件-SonarLint

    SonarQube(Sonar)之前的提供的本地工具是需要依赖SonarQube服务器的,这样导致其运行速度缓慢. 新出的SonarLint的扫描引擎直接安装在本地,速度超快,实时探测代码技术债务,给 ...

  3. myloader恢复mysql数据库演示样例

     mydumper是针对mysql数据库备份的一个轻量级第三方的开源工具.备份方式为逻辑备份.它支持多线程.备份速度远高于原生态的mysqldump以及众多优异特性.与其相配套的恢复工具则是mylo ...

  4. windows 7中添加新硬件的两种方法(本地回环网卡)

    最近在windows7上使用VMwareWorkstation7玩一些实验,遇到需要配置不同网络的问题. 因为在windows2003server上习惯使用要本地回环网卡了,那就想着在Windows7 ...

  5. android的ndk学习(1)

    android的ndk学习(1)   之前学了一段时间ndk,总认为要总结一下.ndk使得很方便地实现java和C与C++代码的相互沟通.合理地掌握使用ndk能够提高应用程序的运行效率.所以对于学习a ...

  6. Javascript基本概念梳理

    javascript里的数据类型: 原始类型:数字,字符串.布尔值.(原始值:null,undefined) 对象类型:键值对,数组,function,全局对象(MATH,JSON) 保留字: abs ...

  7. Matplotlib作图基础

    折线图 import matplotlib.pylab as pylab import numpy as npy x=[1,2,3,4,8] y=[5,7,2,1,5] #折线图 pylab.plot ...

  8. ubuntu12.04安装NVIDIA显卡驱动和CUDA

    1.安装显卡驱动 vim /etc/modprobe.d/blacklist.conf #编辑该文件 blacklist nouveau #行末添加,禁用原来的显卡驱动 apt-get install ...

  9. Cannot change version of project facet Dynamic Web Module to 3.1 (Eclipse Maven唯一解决方式)

    If you want to use version 3.1 you need to use the following schema: http://xmlns.jcp.org/xml/ns/jav ...

  10. 指针数组,数组指针,函数指针,main函数实质,二重指针,函数指针作为參数,泛型函数

     1.指针数组 数组里面的每一个元素都是指针. 指针数组的案比例如以下: 易犯错误: 2.数组指针 归根结底还是指针,仅仅是取*的时候可以取出一整个数组出来. 数组指针:(一个指针指向了数组.一般 ...