Log4net - 项目使用的一个简单Demo
参考页面:
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的更多相关文章
- angular实现了一个简单demo,angular-weibo-favorites
前面必须说一段 帮客户做了一个过渡期的项目,唯一的要求就是速度,我只是会点儿基础的php,于是就用tp帮客户做了这个项目.最近和客户架构沟通,后期想把项目重新做一下,就用现在最流行的技术,暂时想的使用 ...
- 在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 ...
- 关于EF的一个简单Demo
今天使用EF的时候很奇怪的问题,添加属性后,使用程序包管理器控制台的NuGet命令更新无效,于是做了这个测试,一次性写好,自动更新,看看效果 1.首先建立一个MVC项目 2.我们选择Intern ...
- 用redis来实现Session保存的一个简单Demo
现在很多项目都用Redis(RedisSessionStateProvider)来保存Session数据,但是最近遇到一个比较典型的情况,需要把用户数据全部load到redis里面,在加上RedisS ...
- Android中调用C++函数的一个简单Demo
这里我不想多解释什么,对于什么JNI和NDK的相关内容大家自己去百度或谷歌.我对Android的学习也只是个新手.废话少说直接进入正题. 一.在Eclipse中创建一个Android Applicat ...
- gin框架初识(先跑一个简单demo) ①
Gin 是一个 go 写的 web 框架,具有高性能的优点.官方地址:https://github.com/gin-gonic/gin 先跑一个demo(先安装gin框架,具体见官方地址): 1.vs ...
- 【转】用Pthread创建线程的一个简单Demo
一.我们直接在COCOS2D-X自带的HelloWorld工程中添加代码.首先将Pthread的文件包含进来包括lib文件.在HelloWorld.cpp中引入头文件和库. #include &quo ...
- COCOS2D-X之圆形进度条的一个简单Demo
这应该是游戏中很常见的一个效果.显示某个事件的进度等,在加载资源或者联网的时候经常用到.所以有必要学习学习 一.我们直接在COCOS2D-X自带的HelloCpp的工程中添加代码即可.我们在初始化中添 ...
- 如何使用eclipse创建JAVA项目并写一个简单的HelloWorld
输入项目名称 点击完成(Finish) 原文地址:https://blog.csdn.net/qq_36798713/article/details/79530056
随机推荐
- 6.DNS公司PC访问外网的设置 + 主DNS服务器和辅助DNS服务器的配置
网站部署之~Windows Server | 本地部署 http://www.cnblogs.com/dunitian/p/4822808.html#iis DNS服务器部署不清楚的可以看上一篇:ht ...
- PHP之用户验证和标签推荐的简单使用
本篇主要是讲解一些最简单的验证知识 效果图 bookmark_fns.php <?php require_once('output_fns.php'); require_once('db_fns ...
- CSS知识总结(七)
CSS常用样式 5.背景样式 1)背景颜色 background-color : transparent | color 常用值:①英文单词,②十六进制,③RGB或RGBA 另外,还有一种是 渐变色彩 ...
- 【转】为什么我们都理解错了HTTP中GET与POST的区别
GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数. 你可能自己 ...
- python中IndentationError: expected an indented block错误的解决方法
IndentationError: expected an indented block 翻译为IndentationError:预期的缩进块 解决方法:有冒号的下一行要缩进,该缩进就缩进
- BPM配置故事之案例3-参与者与数据自动加载
这才过了两天,阿海又来了. 阿海:公司决定改进管理方式,以后物资申请的申请人和申请部门要写具体使用人的名字和部门了. 小明:不是要让我改回去吧? 阿海:那太麻烦了,你能不能把申请人改成选择,选好人自动 ...
- 我的MYSQL学习心得(十三) 权限管理
我的MYSQL学习心得(十三) 权限管理 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) ...
- SurfaceView 绘制分形图
之前一直做的是应用类,这次抽时间,参考网上资料实践了下SurfaceView.目标是在页面上画一个科赫曲线的分形图. 代码如下: package com.example.fredric.demo02; ...
- SSH隧道应用, 突破网络限制
文/怡文圣美 这篇文章可以帮你解决下面三个问题: 不能直连服务器, 要先登陆跳板机, 造成客户端工具无法连接服务器. 服务器没有公网IP, 且只允许公司IP访问, 要在家里操作要先远程桌面到工作机再登 ...
- Spark笔记:RDD基本操作(上)
本文主要是讲解spark里RDD的基础操作.RDD是spark特有的数据模型,谈到RDD就会提到什么弹性分布式数据集,什么有向无环图,本文暂时不去展开这些高深概念,在阅读本文时候,大家可以就把RDD当 ...