参考页面:

http://www.yuanjiaocheng.net/entity/entitytypes.html

http://www.yuanjiaocheng.net/entity/entity-relations.html

http://www.yuanjiaocheng.net/entity/entity-lifecycle.html

http://www.yuanjiaocheng.net/entity/code-first.html

http://www.yuanjiaocheng.net/CSharp/csharprumenshili.html

上一篇, 都是从别人那里拷过来的, 主要是介绍规则和说明的. 这一篇, 才是重点, 讲实际使用.

首先介绍项目中最常用的配置文件方式.

一、log4net.config 文件方式

我习惯, 把log4net的配置, 放在一个单独的配置文件中, 而不是放在 app.config或者web.config文件中, 这样做, 虽然麻烦了一点, 但是好处就是泾渭分明, 清晰明了.

1. 首先要做的, 就是在 AssemblyInfo.cs 文件中, 加一句话

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

2. 接下来, 有两种方法, 一种是在app.config/web.config文件中加两句话, 另一种是在程序中加一句话. 那么先看第一种吧.

2.1 web.config

<configSections>
  <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
<log4net configSource="log4net.config" />

与这无关的配置, 我都干掉了.  接下来, 可以看看我的 Log4net.config文件

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <root>
    <level value="ALL" />
    <appender-ref ref="ErrorLogFileAppender" />
    <appender-ref ref="TraceLogFileAppender" />
  </root>

  <!--跟踪日志输出-->
  <appender name="TraceLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="Logs\Trace\" />
    <appendToFile value="true" />
    <MaxSizeRollBackups value="20" />
    <RollingStyle value="Date" />
    <DatePattern value="yyyy-MM-dd'.txt'" />
    <StaticLogFileName value="false" />
    <layout type="log4net.Layout.PatternLayout,log4net">
      <header value="[BEGIN LOGGING AT %date]%newline" type="log4net.Util.PatternString" />
      <footer value="[END LOGGING AT %date]%newline%newline" type="log4net.Util.PatternString" />
      <ConversionPattern value="%d [%t] %-5p %c - %m%n" />
    </layout>
    <filter type="log4net.Filter.LevelRangeFilter,log4net">
      <levelMin value="DEBUG" />
      <levelMax value="INFO" />
    </filter>
  </appender>

  <!--错误日志输出-->
  <appender name="ErrorLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="Logs\Error\" />
    <MaxSizeRollBackups value="20" />
    <StaticLogFileName value="false" />
    <DatePattern value="yyyy-MM-dd'.txt'" />
    <RollingStyle value="Date" />
    <appendToFile value="true" />
    <layout type="log4net.Layout.PatternLayout,log4net">
      <header value="[BEGIN LOGGING AT %date]%newline" type="log4net.Util.PatternString" />
      <footer value="[END LOGGING AT %date]%newline%newline" type="log4net.Util.PatternString" />
      <ConversionPattern value="%d [%t] %-5p %c - %m%n" />
    </layout>
    <filter type="log4net.Filter.LevelRangeFilter,log4net">
      <levelMin value="ERROR" />
      <levelMax value="FATAL" />
    </filter>
  </appender>
</log4net>

我在controller中, 弄了一个错误点, 还是把代码贴出来吧. 清晰点

public ActionResult Index()
{
    LogHelper.Log("trace").WriteInfo("进入HomeController/Index方法");try
    {
        ;

        ;

        var s = b / a;
    }
    catch (Exception ex)
    {
        string errorMsg = string.Format(@"后台异常信息:【{0}】,
    引发异常的方法:【{1}】,
    引发异常的对象:【{2}】",
                                            ex.Message,  //异常信息
                                            ex.TargetSite.ToString(),   //异常方法名
                                            ex.Source //引发异常的对象
                                            );
        LogHelper.Log("logsys").WriteError(errorMsg);
    }
    LogHelper.Log("trace").WriteInfo("离开HomeController/Index方法");
    return View(list);
}

接下来看一下结果:

1). 看一下生成的目录

 

这里使用的是日期命名的方式, 每天一个文件, 还有一种, 是使用大小限制的方式, 一个文件限制比如10M, 过了10M, 会自动重新生成一个文件.

2). 看一下日志里面记录的内容

这里的例子, 用的都是最简单的方式, 主要是介绍一下使用方法.

2.2 程序中配置的方式

public class LogHelper
{
    static LogHelper()
    {
        XmlConfigurator.Configure(new FileInfo("Log4net.config"));
    }

    private static LogHelper _instance = null;
    private static ILog ILog;

    public static LogHelper Log(Type t)
    {
        if (_instance == null)
            _instance = new LogHelper();

        ILog = LogManager.GetLogger(t);

        return _instance;
    }

    public static LogHelper Log(string sType)
    {
        if (_instance == null)
            _instance = new LogHelper();

        ILog = LogManager.GetLogger(sType);

        return _instance;
    }
    /// <summary>
    /// 写调试信息
    /// </summary>
    /// <param name="msg">消息</param>
    public void WriteDebug(string msg)
    {
        ILog.Debug(msg);
    }

    /// <summary>
    /// 写普通信息
    /// </summary>
    /// <param name="msg">消息</param>
    public void WriteInfo(string msg)
    {
        ILog.Info(msg);
    }

    /// <summary>
    /// 写警告信息
    /// </summary>
    /// <param name="msg">消息</param>
    public void WriteWarn(string msg)
    {
        ILog.Warn(msg);
    }

    /// <summary>
    /// 写错误信息
    /// </summary>
    /// <param name="msg">消息</param>
    public void WriteError(string msg)
    {
        ILog.Error(msg);
    }

    /// <summary>
    /// 写错误信息
    /// </summary>
    /// <param name="msg">消息</param>
    /// <param name="ex">错误信息</param>
    public void WriteError(string msg, Exception ex)
    {
        ILog.Error(msg, ex);
    }

    /// <summary>
    /// 写重大错误信息
    /// </summary>
    /// <param name="msg">消息</param>
    public void WriteFatal(string msg)
    {
        ILog.Fatal(msg);
    }
}

主要是 XmlConfigurator.Configure() 方法. config里面app.config/web.config文件中不加配置, 加这一句话也是可以的.

看一下结果:

这里只有Begin logging , 为啥没有 End logging呢, 这个是logger自动加的, 会在结束的时候加上去的.

Log4net - 项目使用的一个简单Demo的更多相关文章

  1. angular实现了一个简单demo,angular-weibo-favorites

    前面必须说一段 帮客户做了一个过渡期的项目,唯一的要求就是速度,我只是会点儿基础的php,于是就用tp帮客户做了这个项目.最近和客户架构沟通,后期想把项目重新做一下,就用现在最流行的技术,暂时想的使用 ...

  2. 在cengos中安装zabbix server/agent, 并创建一个简单demo

    添加zabbix更新源 rpm -ivh http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch ...

  3. 关于EF的一个简单Demo

       今天使用EF的时候很奇怪的问题,添加属性后,使用程序包管理器控制台的NuGet命令更新无效,于是做了这个测试,一次性写好,自动更新,看看效果 1.首先建立一个MVC项目 2.我们选择Intern ...

  4. 用redis来实现Session保存的一个简单Demo

    现在很多项目都用Redis(RedisSessionStateProvider)来保存Session数据,但是最近遇到一个比较典型的情况,需要把用户数据全部load到redis里面,在加上RedisS ...

  5. Android中调用C++函数的一个简单Demo

    这里我不想多解释什么,对于什么JNI和NDK的相关内容大家自己去百度或谷歌.我对Android的学习也只是个新手.废话少说直接进入正题. 一.在Eclipse中创建一个Android Applicat ...

  6. gin框架初识(先跑一个简单demo) ①

    Gin 是一个 go 写的 web 框架,具有高性能的优点.官方地址:https://github.com/gin-gonic/gin 先跑一个demo(先安装gin框架,具体见官方地址): 1.vs ...

  7. 【转】用Pthread创建线程的一个简单Demo

    一.我们直接在COCOS2D-X自带的HelloWorld工程中添加代码.首先将Pthread的文件包含进来包括lib文件.在HelloWorld.cpp中引入头文件和库. #include &quo ...

  8. COCOS2D-X之圆形进度条的一个简单Demo

    这应该是游戏中很常见的一个效果.显示某个事件的进度等,在加载资源或者联网的时候经常用到.所以有必要学习学习 一.我们直接在COCOS2D-X自带的HelloCpp的工程中添加代码即可.我们在初始化中添 ...

  9. 如何使用eclipse创建JAVA项目并写一个简单的HelloWorld

    输入项目名称  点击完成(Finish) 原文地址:https://blog.csdn.net/qq_36798713/article/details/79530056

随机推荐

  1. 细说前端自动化打包工具--webpack

    背景 记得2004年的时候,互联网开发就是做网页,那时也没有前端和后端的区分,有时一个网站就是一些纯静态的html,通过链接组织在一起.用过Dreamweaver的都知道,做网页就像用word编辑文档 ...

  2. load和initialize方法

      一.load 方法什么时候调用: 在main方法还没执行的时候 就会 加载所有类,调用所有类的load方法. load方法是线程安全的,它使用了锁,我们应该避免线程阻塞在load方法. 在项目中使 ...

  3. 旺财速啃H5框架之Bootstrap(三)

    好多天没有写了,继续走起 在上一篇<<旺财速啃H5框架之Bootstrap(二)>>中已经把CSS引入到页面中,接下来开始写页面. 首先有些问题要先处理了,问什么你要学boot ...

  4. ASP.NET MVC5+EF6+EasyUI 后台管理系统(72)-微信公众平台开发-消息处理

    系列目录 前言 Senparc.Weixin.MP SDK提供了MessageHandler消息处理类 在作者的Wiki中也详细说明了如何定义这个类,下面我们来演示,消息的回复,及效果 了解Messa ...

  5. 谈谈一些有趣的CSS题目(七)-- 消失的边界线问题

    开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...

  6. 代码的坏味道(14)——重复代码(Duplicate Code)

    坏味道--重复代码(Duplicate Code) 重复代码堪称为代码坏味道之首.消除重复代码总是有利无害的. 特征 两个代码片段看上去几乎一样. 问题原因 重复代码通常发生在多个程序员同时在同一程序 ...

  7. LINQ to SQL Select查询

    1. 查询所有字段 using (NorthwindEntities context = new NorthwindEntities()) { var order = from n in contex ...

  8. 使用rowid抽取数据方法以及大数据量游标卡住的应对

    平时工作的时候,经常会遇到这种事情,从一个大表A中,抽取字段a在一个相对较小B的表的数据,比如,从一个详单表中,抽取几万个用户号码的话单出来.这种时候,一般来说, 做关联查询: create tabl ...

  9. BPM Domino集成解决方案

    一.需求分析 Lotus Notes/Domino是IBM的协同办公平台,在国内有广泛的用户. 但由于推出年头较早.采用文档数据库等特点, 导致其流程集成能力弱.统计分析难.不支持移动办公等问题,很多 ...

  10. Idea下用SBT搭建Spark Helloworld

    没用过IDEA工具,听说跟Eclipse差不多,sbt在Idea其实就等于maven在Eclipse.Spark运行在JVM中,所以要在Idea下运行spark,就先要安装JDK 1.8+ 然后加入S ...