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过于简单,没有任何管理和限 ...
随机推荐
- Servlet开发(2)
Jsp&Servlet用户登录功能实现(采用MVC模式) 我们使用Jsp&Servlet开发一个用户登录功能的小项目(麻雀大小,但是五脏俱全呦,关键是技术问题!). 数据库:mysql ...
- Eclipse-Java代码规范和质量检查插件-SonarLint
SonarQube(Sonar)之前的提供的本地工具是需要依赖SonarQube服务器的,这样导致其运行速度缓慢. 新出的SonarLint的扫描引擎直接安装在本地,速度超快,实时探测代码技术债务,给 ...
- myloader恢复mysql数据库演示样例
mydumper是针对mysql数据库备份的一个轻量级第三方的开源工具.备份方式为逻辑备份.它支持多线程.备份速度远高于原生态的mysqldump以及众多优异特性.与其相配套的恢复工具则是mylo ...
- windows 7中添加新硬件的两种方法(本地回环网卡)
最近在windows7上使用VMwareWorkstation7玩一些实验,遇到需要配置不同网络的问题. 因为在windows2003server上习惯使用要本地回环网卡了,那就想着在Windows7 ...
- android的ndk学习(1)
android的ndk学习(1) 之前学了一段时间ndk,总认为要总结一下.ndk使得很方便地实现java和C与C++代码的相互沟通.合理地掌握使用ndk能够提高应用程序的运行效率.所以对于学习a ...
- Javascript基本概念梳理
javascript里的数据类型: 原始类型:数字,字符串.布尔值.(原始值:null,undefined) 对象类型:键值对,数组,function,全局对象(MATH,JSON) 保留字: abs ...
- Matplotlib作图基础
折线图 import matplotlib.pylab as pylab import numpy as npy x=[1,2,3,4,8] y=[5,7,2,1,5] #折线图 pylab.plot ...
- ubuntu12.04安装NVIDIA显卡驱动和CUDA
1.安装显卡驱动 vim /etc/modprobe.d/blacklist.conf #编辑该文件 blacklist nouveau #行末添加,禁用原来的显卡驱动 apt-get install ...
- 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 ...
- 指针数组,数组指针,函数指针,main函数实质,二重指针,函数指针作为參数,泛型函数
1.指针数组 数组里面的每一个元素都是指针. 指针数组的案比例如以下: 易犯错误: 2.数组指针 归根结底还是指针,仅仅是取*的时候可以取出一整个数组出来. 数组指针:(一个指针指向了数组.一般 ...