1.添加应用log4net.dll

2.新增log4net.config文件,文件内容如下

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<log4net>
<root>
<level value="ALL" />
<appender-ref ref="LogFileAppender" />
</root>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" >
<param name="File" value="Log.txt" />
<param name="AppendToFile" value="false" />
<layout type="log4net.Layout.PatternLayout">
<!--<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] &lt;%X{auth}&gt;%n - %m%n" />-->
<!--<param name="Header" value="/************************ Start ********************************/" />
<param name="Footer" value="/************************ End ********************************/" />-->
<param name="ConversionPattern" value="/************************ Start ********************************/%n发生时间:%d %n事件级别:%level %n相关类名:%c%n程序文件:%F 第%L行%n日志内容:%m%n%n" />
</layout>
</appender>
<logger name ="MyLogger">
<level value="ERROR"></level>
<appender-ref ref="LogFileAppender"></appender-ref>
</logger>
</log4net>
</configuration>

3.修改文件AssemblyInfo.cs,在文件的最后添加以下内容

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

4.方法调用

     private static log4net.ILog log = null;private static object lockHelper = new object();
public static log4net.ILog Log
{
get
{
if (log == null)
{
lock (lockHelper)
{
log = log4net.LogManager.GetLogger("MyLogger");
}
}
return log;
}
}public static void LogInfo(string msg)
{
Log.Error(msg);
}

5.查看log文件以确认log正常写入了

如何防止自定义的logger和root重复写入日志

logger是从root继承而来,默认的用logger写的日志会被root重复写一份,如何防止这种情况呢。

其实log4net提供了一种很好的解决方式,断开logger与root的继承关系,只要在配置文件里的logger加上属性additivity="false" 就可以了。

<logger name ="MyLogger" additivity="false" >
<level value="Info"></level>
<appender-ref ref="LogFileAppender"></appender-ref>
</logger>

注:在winform中可能会遇到“缺少log4net引用”的错误,这个其实很简单。选择项目属性进入如下图所示的界面,

然后将目标框架选择为“非客户端配置”在本图片中为黄色高亮的,客户端配置的为精简版的,有许多组件不包含其中的,然后保存成功即可。

cmd中启动exe 方法:

C:\Users>start D:\项目\HSR\trunk\src\HSRailwayStores20111128\PosCloseDate4\bin\Debug\PosCloseDate4.exe  20140331

程序中调用方法:

/********* 调用STLD解析,生成小票程序 Start ********/
Process oCallPosCloseDate4Process = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "PosCloseDate4.exe " + strbussinessDay;
oCallPosCloseDate4Process.StartInfo.UseShellExecute = false;
oCallPosCloseDate4Process.StartInfo.RedirectStandardOutput = true;
oCallPosCloseDate4Process.StartInfo = startInfo;
oCallPosCloseDate4Process.Start();

oCallPosCloseDate4Process.WaitForExit();
/********* 调用STLD解析,生成小票程序 End ********/

怎样让控制台程序在运行时不显示dos界面?

处理方法:打开【项目属性】,找到【输出类型】,改为【windows应用程序】

winform 下log4net简单应用示例及“缺少log4net引用”的处理方案的更多相关文章

  1. C# Winform下一个热插拔的MIS/MRP/ERP框架(多语言方案)

    个别时候,我们需要一种多语种切换方案. 我的方案是这样的: 1.使用文本文本存储多语言元素,应用程序启动时加载到内存表中: 2.应用程序启动时从配置文件加载语种定义: 3.所有窗体继承自一个Base基 ...

  2. ABAP分享四 选择屏幕下拉菜单简单实现示例

    PARAMETERS p_carri2 LIKE spfli-carrid                    AS LISTBOX VISIBLE LENGTH 20                ...

  3. Log4Net日志的简单使用示例

    前言 源码参考示例地址 http://www.51aspx.com/Code/log4netusedemo/2707 本例博客园源码 https://files.cnblogs.com/files/m ...

  4. Winform下CefSharp的引用、配置、实例与报错排除(源码)

    Winform下CefSharp的引用.配置.实例与报错排除 本文详细介绍了CefSharp在vs2013..net4.0环境下,创建Winfrom项目.引用CefSharp的方法,演示了winfro ...

  5. 分享在winform下实现模块化插件编程-优化版

    上一篇<分享在winform下实现模块化插件编程>已经实现了模块化编程,但我认为不够完美,存在以下几个问题: 1.IAppContext中的CreatePlugInForm方法只能依据完整 ...

  6. 分享在winform下实现模块化插件编程

    其实很早之前我就已经了解了在winform下实现插件编程,原理很简单,主要实现思路就是:先定一个插件接口作为插件样式及功能的约定,然后具体的插件就去实现这个插件接口,最后宿主(应用程序本身)就利用反射 ...

  7. 分享在winform下实现左右布局多窗口界面

    在web页面上我们可以通过frameset,iframe嵌套框架很容易实现各种导航+内容的布局界面,而在winform.WPF中实现其实也很容易,我这里就分享一个:在winform下实现左右布局多窗口 ...

  8. 在winform下实现左右布局多窗口界面的方法(一)

    在web页面上我们可以通过frameset,iframe嵌套框架很容易实现各种导航+内容的布局界面,而在winform.WPF中实现其实也很容易,通过本文给大家介绍在winform下实现左右布局多窗口 ...

  9. 分享在winform下实现左右布局多窗口界面-续篇

    之前的这篇文章<分享在winform下实现左右布局多窗口界面>已经实现了左右布局多窗口界面,今天本来是研究基于winform的插件编程,没想到顺便又找到了另一种实现方案,这种实现方案更简单 ...

随机推荐

  1. React-非dom属性-key

    一.react性能 1.内容类似的尽量归到同一人组件,这样react不用每次都重新渲染 2.类似列表的内容,要加上key,可减少渲染次数 3.react渲染过程 二.代码 <!DOCTYPE h ...

  2. css3:target页内跳转

    :target 用于选取当前活动的目标元素 <!DOCTYPE html> <html> <head lang="en"> <meta c ...

  3. 修改图层的symbol(AE+C#)

    取出一个图层的symbol 在其基础上对其进行修改 private void button1_Click(object sender, EventArgs e)        {  mp;nbsp;  ...

  4. UML系列01之 UML用例图

    UML,全称是Unified Modeling Language,中文是"统一建模语言".通俗点说,UML是一种创建模型的语言. UML是在开发阶段,说明,可视化,构建和书写一个面 ...

  5. 266. Palindrome Permutation

    题目: Given a string, determine if a permutation of the string could form a palindrome. For example,&q ...

  6. CentOS服务器的基本配置和查看

    一.设置静态IP 1.修改网卡配置 编辑:vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 #描述网卡对应的设备别名,例如ifcfg-e ...

  7. Android addRule()

    布局中有很多特殊的属性,通常在载入布局之前,在相关的xml文件中进行静态设置即可. 但是,在有些情况下,我们需要动态设置布局的属性,在不同的条件下设置不同的布局排列方式,这时候就需要用到 Relati ...

  8. linux fork函数与vfork函数,exit,_exit区别

    man vfork: NAME vfork - create a child process and block parent SYNOPSIS #include <sys/types.h> ...

  9. vm上安装ubuntu

    图解演示环境版本: 本机系统: WIN7 虚拟机:VMware Workstation 8 (英文版) 安装目标:Ubuntu Desktop 12.04 LTS  (请点击这里)先下载好iso镜像文 ...

  10. aptana studio 3支持jquery

    首先要说的一点是,如果你不使用PortableGit,就不要安装,否则New From Template中会缺失大部分模板.至于还有什么缺陷,暂时没测出来,本人也是刚玩aptana studio 3哈 ...