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. SOJ 3531_Number Pyramids

    [题意]给定一个数top及最底层元素个数n,构成一个以给top为塔尖,层数为n的如杨辉三角的金字塔,求有多少种 [分析]最终种数其实只与最底层的n个数的组合数有关,上层的每个都数是由最底层数相加得来 ...

  2. 洛谷 P2033 Chessboard Dance

    P2033 Chessboard Dance 题目描述 在棋盘上跳舞是件有意思的事情.现在给你一张国际象棋棋盘和棋盘上的一些子以及你的初始位置和方向.求按一定操作后,棋盘的状态. 操作有四种,描述如下 ...

  3. python dos2unix

    有时你在windows上创建的文件拿到Linux/unix上运行会出错, 这是因为windows上有些字符如换行符在linux/unix不识别.这种情况下需要用dos2unix这个工具把文件转换成li ...

  4. Ubuntu 16.04 LTS 搭建LAMP

    1. LAMP是一系列自由和开源软件的集合,包含了Linux.Web服务器(Apache).数据库服务器(MySQL)和PHP(脚本语言). Apache2 Web 服务器的安装 sudo apt i ...

  5. 魔兽争霸3 冰封王座 w3g文件如何打开

    w3g文件怎么样才能看??? 满意回答 检举|2011-11-10 11:23 你应该是玩魔兽争霸的吧,如果是就找到你魔兽安装文件夹里面有个replay的文件夹,把w3g格式的文件放入该文件夹,再进入 ...

  6. 字符串匹配之KMP算法(续)---还原next数组

    相信通过今天的文章,你会对KMP的认识更加深入一层,不止停留在知道怎样计算的层面上了,废话不多说,開始. 通过前面的第一篇文章,知道了怎么求next数组,相信非常多喜欢刨根问底的人就会问,我依照你的做 ...

  7. PHP开发出来的万年历

    <?php /** * PHP万年历 */ class Calendar{ protected $_table;//table表格 protected $_currentDate;//当前日期 ...

  8. xode5.1.1设置IOS欢迎界面的方法

    先准备3张不同尺寸的欢迎图.文件名称分别为: Default.png  iPhone 320X480分辨率屏幕默认启动图片. Default@2x.png iPhone 640X960分辨率屏幕默认启 ...

  9. hdu 2665 Kth number(划分树)

    Kth number Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...

  10. [办公自动化]计算机突然死机后asd自动恢复文档未能恢复,如何打开使用

    今天计算机突然死机,但是word未能提示自动恢复窗格.所以无法自动恢复word文档.但是在文档所在的文件夹看到了一个“自动恢复”开头的asd恢复文档. 该如何使用这个文档呢? 按照以前的惯例,尝试了如 ...