winform 下log4net简单应用示例及“缺少log4net引用”的处理方案
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] <%X{auth}>%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引用”的处理方案的更多相关文章
- C# Winform下一个热插拔的MIS/MRP/ERP框架(多语言方案)
个别时候,我们需要一种多语种切换方案. 我的方案是这样的: 1.使用文本文本存储多语言元素,应用程序启动时加载到内存表中: 2.应用程序启动时从配置文件加载语种定义: 3.所有窗体继承自一个Base基 ...
- ABAP分享四 选择屏幕下拉菜单简单实现示例
PARAMETERS p_carri2 LIKE spfli-carrid AS LISTBOX VISIBLE LENGTH 20 ...
- Log4Net日志的简单使用示例
前言 源码参考示例地址 http://www.51aspx.com/Code/log4netusedemo/2707 本例博客园源码 https://files.cnblogs.com/files/m ...
- Winform下CefSharp的引用、配置、实例与报错排除(源码)
Winform下CefSharp的引用.配置.实例与报错排除 本文详细介绍了CefSharp在vs2013..net4.0环境下,创建Winfrom项目.引用CefSharp的方法,演示了winfro ...
- 分享在winform下实现模块化插件编程-优化版
上一篇<分享在winform下实现模块化插件编程>已经实现了模块化编程,但我认为不够完美,存在以下几个问题: 1.IAppContext中的CreatePlugInForm方法只能依据完整 ...
- 分享在winform下实现模块化插件编程
其实很早之前我就已经了解了在winform下实现插件编程,原理很简单,主要实现思路就是:先定一个插件接口作为插件样式及功能的约定,然后具体的插件就去实现这个插件接口,最后宿主(应用程序本身)就利用反射 ...
- 分享在winform下实现左右布局多窗口界面
在web页面上我们可以通过frameset,iframe嵌套框架很容易实现各种导航+内容的布局界面,而在winform.WPF中实现其实也很容易,我这里就分享一个:在winform下实现左右布局多窗口 ...
- 在winform下实现左右布局多窗口界面的方法(一)
在web页面上我们可以通过frameset,iframe嵌套框架很容易实现各种导航+内容的布局界面,而在winform.WPF中实现其实也很容易,通过本文给大家介绍在winform下实现左右布局多窗口 ...
- 分享在winform下实现左右布局多窗口界面-续篇
之前的这篇文章<分享在winform下实现左右布局多窗口界面>已经实现了左右布局多窗口界面,今天本来是研究基于winform的插件编程,没想到顺便又找到了另一种实现方案,这种实现方案更简单 ...
随机推荐
- RHEL7全新初始化进程管理systemd(图形启动和非图形启动切换)
红帽RHEL7系统已经替换了大家熟悉的初始化进程System V init,正式采用全新的 初始化进程systemd.初始化进程systemd使用了并发启动机制,所以开机速度上得到了不小的 提升. 将 ...
- SSIS ->> Null & Null Functions
SSIS不支持值为NULL的变量.每种类型的变量都有自己的默认值. 做了一个测试,用一个Execute SQL Task输出一个NULL值给A变量,然后把A变量传到到另外一个Execute SQL T ...
- centos 安装jdk
不要使用yum 安装openjdk,他妈的就是一坑货 首先到官网下载jdk,http://www.oracle.com/technetwork/java/javase/downloads/jdk7-d ...
- LINUX下的MYSQL默认表名区分大小写
让MYSQL不区分表名大小写的方法其实很简单: 1.用ROOT登录,修改/etc/my.cnf,该文件的路径也可能是/usr/my.cnf. 2.加入一行:lower_case_table_names ...
- VC操作ADO的基本策略
一.ADO概述 ADO是Microsoft为最新和最强大的数据访问范例 OLE DB 而设计的,是一个便于使用的应用程序层接口.ADO 使您能够编写应用程序以通过 OLE. DB 提供者访问和操作数据 ...
- C# 将字符串转化成流,将流转换成字符串
using System; using System.IO; using System.Text; namespace CSharpConvertString2Stream { class Progr ...
- Android电源管理-休眠简要分析
一.开篇 1.Linux 描述的电源状态 - On(on) S0 - Working - Standb ...
- 51nod 1117 聪明的木匠 (贪心)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1117 跟挑战程序书上例题一样,将要切割的n断木板,分别对应二叉树树的叶子 ...
- Objective-C 类的继承、方法的重写和重载
一.类的继承 Objective-c中类的继承与C++类似,不同的是Objective-c不支持多重继承,一个类只能有一个父类,单继承使Objective-c的继承关系很简单,易于管理程序.Objec ...
- MTK6577 Android源代码目录
MTK6577 Android源代码目录 1. MTKAndroid4.0 源代码目录 (1) makeMtk 整个工程编译或是构建(make/build)的入口. (2) abi 应用程 ...