log4net 简易封装
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 简易封装的更多相关文章
- 面localStorage用作数据缓存的简易封装
面localStorage用作数据缓存的简易封装 最近做了一些前端控件的封装,需要用到数据本地存储,开始采用cookie,发现很容易就超过了cookie的容量限制,于是改用localStorage,但 ...
- log4net使用封装,无缝切换 dotnet 和 dotnetcore
log4net使用封装,无缝切换 dotnet 和 dotnetcore Intro 自己有几个自己的小项目,有许多公用的方法/扩展/工具类等等,于是封装了一些常用的工具类/扩展方法 WeihanLi ...
- UITextField的简易封装
UITextField的简易封装 效果 源码 https://github.com/YouXianMing/UI-Component-Collection 中的 UITextFieldView // ...
- AVAudioPlayer简易封装
AVAudioPlayer简易封装 [说明] AVAudioPlayer简易封装,仅仅支持播放,暂停,停止,暂停时候带有渐隐效果,自己用,没有参考价值. [源码] https://github.com ...
- 对xlslib库与libxls库的简易封装
一.简介 xlslib库是用来创建excel文件.libxls是用来读取excel文件的,在使用C++或者QT语言来设计对excel文件的读取.都需要事先下载这两个库编译成功后再进行程序设计的.之所以 ...
- node.js + mssql 简易封装操作
时间吧,总是这么凑巧,在我学习[node.js]还没几天,我的 Microsoft SQL Server Management Studio 18 就歇菜了,至于怎么歇菜的吧....它可能的意思就是想 ...
- 基于Vue简易封装的快速构建Echarts组件 -- fx67llQuickEcharts
fx67llQuickEcharts A tool to help you use Echarts quickly! npm 组件说明 这本来是一个测试如何发布Vue组件至npm库的测试项目 做完之后 ...
- jQuery版AJAX简易封装
开发过程中,AJAX的应用应该说非常频繁,当然,jQuery的AJAX函数已经非常好用,但是小编还是稍微整理下,方便不同需求下,可以简化输入参数,下面是实例代码: $(function(){ /** ...
- 页面localStorage用作数据缓存的简易封装
最近做了一些前端控件的封装,需要用到数据本地存储,开始采用cookie,发现很容易就超过了cookie的容量限制,于是改用localStorage,但localStorage过于简单,没有任何管理和限 ...
随机推荐
- 洛谷 P2033 Chessboard Dance
P2033 Chessboard Dance 题目描述 在棋盘上跳舞是件有意思的事情.现在给你一张国际象棋棋盘和棋盘上的一些子以及你的初始位置和方向.求按一定操作后,棋盘的状态. 操作有四种,描述如下 ...
- SQL Server转sqlite数据库
下载地址:http://files.cnblogs.com/jason-davis/SQL_Server_To_SQLite_DB_Converter_bin.zip 下载地址:http://file ...
- ETL增量单表同步简述_根据dateTime增量
ETL增量单表同步简述 1. 实现需求 当原数据库的表有新增.更新.删除操作时,将改动数据同步到目标库对应的数据表. 2. 设计思路 设计总体流程图如下: 步骤简单说明: 1.设置job的执行属性,如 ...
- [AngularJS] ocLazyLoad -- Lazy loaded module should contain all the dependencies code
Recentlly works with AngularJS + ocLazyLoad, our project have break down into multi small modules. F ...
- c++运算符重载以及一些基本概念
c++primer第四版435 1.赋值( = ), 下标( [ ] ) ,调用 ( ( ) ), 成员訪问箭头 (->)等操作符必须定义为成员,定义为非成员时,编译器报错 2. 像赋值一样 ...
- 基于AR谱特征的声目标识别
本文第一部分先解释AR谱,但并不会给出太多的细节,第二部分介绍几种常见的语音中的特征.有些在之前的博文中已经用过.诸如过零率. 第三部分给出实际操作的过程及识别的效果.本文的目标是通过对DSP採集的声 ...
- 使用 FFmpeg 处理高质量 GIF 图片
使用 FFmpeg 处理高质量 GIF 图片 - 为程序员服务 http://ju.outofmemory.cn/entry/169845
- codeforces 245H Queries for Number of Palindromes RK Hash + dp
H. Queries for Number of Palindromes time limit per test 5 seconds memory limit per test 256 megabyt ...
- python-----截取xml文件画框的图片并保存
from __future__ import division import os from PIL import Image import xml.dom.minidom import numpy ...
- 洛谷 P1084 疫情控制 —— 二分+码力
题目:https://www.luogu.org/problemnew/show/P1084 5个月前曾经写过一次,某个上学日的深夜,精疲力竭后只有区区10分,从此没管... #include< ...