Log4Net五部曲

本文主要讲述如何构建封装一个日志工具类,以及在该过程中遇到的问题,

关于Log4Net的介绍,就不详细赘述了,更多详细的技术可参考http://www.cnblogs.com/kissazi2/p/3393595.html

在我完成本功能的过程中也详细拜读了他的博客,讲解的很详细。接下来我将我自己完成的Log4Net做一个展示。在本系统中,存在一个基础类库存放LogHelper工具类以及其他一些工具类,一个Web项目Zone用于调用Log,输出log信息,其他不相干的就不介绍了。其实该功能是相对来说都大同小异。项目目录如下:

一、引入log4net.dll文件

首先需要在项目中引入log4net,引用->Nuget包管理->搜索log4net->Apache Log4net->安装即可,或直接在项目中引入log4net.dll文件

二、创建log4net的工具类

创建一个类库,Commons类库,创建一个基础类LogHelper,供其他地方调用

具体代码如下:

 /// <summary>
    /// 日志
    /// </summary>
    public class LogHelper
    {
       //日志级别
        private const string ErrorLevel = "Error";
        private const string DebugLevel = "Debug";
        private const string InfoLevel = "Info";
        private const string FatalLevel = "Fatal";
        private const string WarningLevel = "Warn";
        static LogHelper()
        {
            var path = AppDomain.CurrentDomain.BaseDirectory + @"log4net.config";
            log4net.Config.XmlConfigurator.Configure(new FileInfo(path));
        }
        #region 获得ILog
        /// <summary>
        /// 根据Log等级获得log
        /// </summary>
        /// <param name="logLevel">Log等级</param>
        /// <returns></returns>
        public static ILog GetLog(string logLevel)
        {
            var log = log4net.LogManager.GetLogger(logLevel);
            return log;
        }
        #endregion

        #region Info 级别的日志
        public static void Info(string message)
        {
            var log = GetLog(InfoLevel);
            if (log.IsInfoEnabled)
            {
                log.Info(message);
            }
        }
        #endregion
        #region Info 级别的日志
        public static void Info(string message,Exception ex)
        {
            var log = GetLog(InfoLevel);
            if (log.IsInfoEnabled)
            {
                log.Info(message,ex);
            }
        }
        #endregion

        #region Debug 级别的日志
        public static void Debug(string message)
        {
            var log = GetLog(DebugLevel);
            if (log.IsDebugEnabled)
            {
                log.Debug(message);
            }
        }
        #endregion
        #region Debug 级别的日志
        public static void Debug(string message,Exception ex)
        {
            var log = GetLog(DebugLevel);
            if (log.IsDebugEnabled)
            {
                log.Debug(message,ex);
            }
        }
        #endregion

        #region Error 级别的日志
        public static void Error(string message)
        {
            var log = GetLog(ErrorLevel);
            if (log.IsErrorEnabled)
            {
                log.Error(message);
            }
        }
        #endregion
        #region Error 级别的日志
        public static void Error(string message,Exception ex)
        {
            var log = GetLog(ErrorLevel);
            if (log.IsErrorEnabled)
            {
                log.Error(message,ex);
            }
        }
        #endregion

        #region Fatal 级别的日志
        public static void Fatal(string message)
        {
            var log = GetLog(FatalLevel);
            if (log.IsFatalEnabled)
            {
                log.Fatal(message);
            }
        }
        #endregion
        #region Fatal 级别的日志
        public static void Fatal(string message,Exception ex)
        {
            var log = GetLog(FatalLevel);
            if (log.IsFatalEnabled)
            {
                log.Fatal(message,ex);
            }
        }
        #endregion

        #region Warn 级别的日志
        public static void Warning(string message)
        {
            var log = GetLog(WarningLevel);
            if (log.IsWarnEnabled)
            {
                log.Warn(message);
            }
        }
        #endregion
        #region Warn 级别的日志
        public static void Waring(string message,Exception ex)
        {
            var log = GetLog(WarningLevel);
            if (log.IsWarnEnabled)
            {
                log.Warn(message,ex);
            }
        }
        #endregion
    }

三、在该类库的AssemblyInfo.cs文件末尾添加

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)]

四、创建log4net.config

在调用LogHelper的项目中,创建一个log4net.config,我这里使用的配置内容如下;

<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
  </configSections>
  <log4net>
    <root>
      <!--控制级别由低到高:ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
      <!--比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录-->
      <!--如果没有定义LEVEL的值,则缺省为DEBUG-->
      <level value="ALL"/>
    </root>
    <appender name="TestInfo" type="log4net.Appender.RollingFileAppender"  >
      <file value="log/Info/"/>
      <appendToFile value="true"/>
      <rollingStyle value="Composite" />
      <maxSizeRollBackups value="-1" />
      <maximumFileSize value="1MB" />
      <staticLogFileName value="false" />
      <DatePattern value="yyyy-MM-dd&quot;.txt&quot;"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date  %-5level  - %message%newline" />
      </layout>
    </appender>
    <appender name="TestError" type="log4net.Appender.RollingFileAppender">
      <file value="log/Error/" />
      <appendToFile value="true" />
      <rollingStyle value="Composite" />
      <maxSizeRollBackups value="-1" />
      <maximumFileSize value="1MB" />
      <staticLogFileName value="false" />
      <DatePattern value="yyyy-MM-dd&quot;.txt&quot;"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date  %-5level - %message%newline" />
      </layout>
    </appender>
    <appender name="TestDebug" type="log4net.Appender.RollingFileAppender">
      <file value="log/Debug/" />
      <appendToFile value="true" />
      <rollingStyle value="Composite" />
      <maxSizeRollBackups value="-1" />
      <maximumFileSize value="1MB" />
      <staticLogFileName value="false" />
      <DatePattern value="yyyy-MM-dd&quot;.txt&quot;"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date  %-5level - %message%newline" />
      </layout>
    </appender>

    <logger name="Info">
      <level value="ALL"/>
      <appender-ref ref="Info" />
      <appender-ref ref="TestInfo" />
    </logger>
    <logger name="Error">
      <level value="ALL"/>
      <appender-ref ref="Error" />
      <appender-ref ref="TestError" />
    </logger>
    <logger name="Debug">
      <level value="ALL"/>
      <appender-ref ref="Debug" />
      <appender-ref ref="TestDebug" />
    </logger>
  </log4net>
</configuration>

关于参数的详细配置,我就不做介绍了,可参考上文提到的博客中有详细介绍(注意,我在loghelper中虽然写了Warn和Fatal级别的日志,但在此配置中没有对这两个级别的日志做配置,故,项目不会产生这两个级别的日志)

修改log4net.config文件的属性为"始终复制"

五、在需要使用Log4Net的项目中添加该类库的引用(本系统就是Commons.dll)

在需要打印log的地方使用。修改

LogHelper.Info("产生LOG");//产生一条Info级别的Log信息

运行项目会在该项目目录下产生log/Debug/当前日期.txt、log/Error/当前日期.txt、log/Info/当前日期.txt.

在本文中红色标注的地方是可能出错的地方,如有异常一定要先检查这些

时间: 2024-10-27 07:56:33

Log4Net五部曲的相关文章

MVC4下配置log4net 五部曲

第一步:把log4net.dll 编译成Framework 4.0 第二步:找到项目的Properties下的AssemblyInfo.在最下面添加:[assembly: log4net.Config.XmlConfigurator(Watch = true)]. 第三步:Web.config <configuration> <configSections> <section name="log4net" type="System.Configu

我的NHibernate之行(一):NHibernate五部曲

NHibernate是一个面向.NET环境的对象/关系数据库映射工具.对象/关系数据库映射(object/relational mapping,ORM)这个术语表示一种技术,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去.--百度百科 简介 从网上找到下面的一张图,自认为这张图相当好: 简单的说ORM,能够达到这样一种效果:我们不用去知道数据库(R)的内容,系统根据M,通过对对象(O)的操作,自动完成访问数据库.例如要完成"根据ID查询",我们对对象使用了Get<

ORM利器:NHibernate(三)五部曲+简单对象CRUD+HQL

前面的两篇文章中,我们对NHibernate已经做了大致了解 <ORM利器:NHibernate(一)简介>Nhibernate的作用:解决了对象和数据库的转化问题 <ORM利器:NHibernate(二)使用CodeSmith快速生成映射文件和映射类>利用CodeSmith由表导出映射类(就是通常所说的Entity)和映射文件(告诉你表和对象之间是如何建立一一对应的关系的). 接下来将会对NHibernate的使用做Demo解析,分为五部曲: 创建表.若要把对象转换为数据库中的表

Java 通过JDBC连接Mysql数据库的方法和实例——五部曲

一:把mysql-connector-java-5.1.20-bin.jar导入到本项目工程的目录下,步骤如下: (1)先新建一个Web Project项目,取项目名为test (2)右键点击工程下的JRE System Library --> Buid Path --> Configure Build Path --> Libraries --> Add Library --> User Library --> new --> 取名为MySQL --> 选

操作系统学习五部曲

一,要想深入学习操作系统,势必会经常遇到汇编语言,这是基础之一.所谓磨刀不误砍柴工,这是必须学好的内容. 二,除了汇编,当然还有C语言,但我C语言有一定基础. 三,之后便是对操作系统原理的掌握,实践.<30天自制简单操作系统><自己动手写操作系统>. 四,然后便是对LINUX系统加深了解. 五,开始学习LINUX内核,LINUX驱动开发. 第五阶段后,我应该是已进入一种融会贯通的境界,不论是LINUX还是WINDOWS亦或其它一切一切,都可以极快上手,理解.

黑帽攻击五部曲

黑帽攻击过程总结. 1.隐藏IP 典型的隐藏真实IP地址的技术有两种:其一,利用跳板进行攻击.这种技术有两种方式: (1)寻找"肉鸡",利用其进行攻击. (2)做多级跳板"sock代理",这样在被入侵的电脑上留下的是代理计算机的IP地址. 其二,利用电话转接技术隐藏自己. 2.踩点扫描 踩点:搜集信息,找出被信任的主机. 扫描:利用扫描工具寻找漏洞. 3.获得特权 获得特权可分为六种方式: (1)由系统或软件漏洞取得系统权限. (2)由管理漏洞获取管理员权限. (3

laravel 项目创建五部曲

前提条件:已安装laravel, php, nginx, mysql, 以下都是在terminal命令行输入 启动php sudo php-fpm 启动nginx sudo nginx 启动mysql mysqld & 创建laravel项目 laravel new projectname 配置nginx环境 1.查看nginx运行 ps aux| grep nginx 2.切换用户 sudo su 3.打开配置文件 cd /usr/local/nginx/conf/vhosts 4.复制一份c

git提交代码五部曲

一. git clone (这个是你新建本地git仓库,如已有可忽略此步) 复制下git项目的https链接,打开git bash客户端,找到你想要放置的路径下,输入链接,可以在链接后边加个其他的名字进行重命名,要是不加的话就显示git项目的名字.输入你的git账号和密码即可获取到对应的git项目代码. 二. 提交代码第一步:git status  查看当前状态 当你忘记修改了哪些文件的时候可以使用 git status  来查看当前状态, 红色的字体显示的就是你修改的文件. 三. 提交代码第二

iOS 之美:iOS Delegate 使用五步曲

在iOS 开发中, 搞清楚Delegate 是需要花些时间的. Delegate 本来是软件架构设计的一种理念.对于像手机这样一个有限的设备,我们需要充分考虑到:内存要尽量省着用: 视图之间的关系要清晰. 如果你所开发的App ,仅仅是一个demo,是体现不出架构优势的. 但当你的App 需要处理海量数据, 而视图之间的关系又颇为复杂时,你将不得不考虑这些问题.视图之间的关系,不仅仅是跳转,更重要的是视图之间数据的传递.当视图A 发生变化时,如何将这个变化告知视图B 呢? 举个例子吧. 如下图所