最近要做一个任务处理程序,是用来定时发送邮件订阅的,打算使用windows的任务计划加控制台程序实现。

控制台程序需要做一些日志操作,使用log4net组件。

下载log4net:http://logging.apache.org/log4net/download.html

我这里用vs2008打开后,会根据升级向导将程序升级到.net2.0,

一般的.net应用包含多个项目,分为可以执行项目与类库,他们的组合有如下几类

ConsoleApp.exe(控制台),多个ddl(指.net程序集)

WinForm.exe (窗体程序),以及多个ddl

WebSite(asp.net网站),以及多个ddl

-----------------------------------------------

ConsoleApp,WinForm 的配置文件是app.config

asp.net 的配置文件是 web.Config

可以在app.Config或web.Config中配置log4net

//log4net配置样板/

<configuration>
 <configSections>
  <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
 </configSections>
 <log4net debug="false">
  <!--
    <root>元素 是全局配置,定义所有logger(通过 LogManager.GetLogger("LogName")创建)
    后面的<logger>元素配置节会继承(指root/appender-ref)/覆盖(指root/level节点)其设置,可以通过logger.additivity来改边这种继承/覆盖关系
  -->
  <root>
   <level value="DEBUG" />
   <!-- appender-ref ref="LogFileAppender"/ -->
   <appender-ref ref="EventLogAppender"/>
  </root>
  <!--
   <logger>定义了一个具体的logger,代码里通过LogManager.GetLogger("SubscribeHandlerLogger")创建或获取(如果已经创建)
   注意<logger>节点不是必须的,你可以直接使用LogManager.GetLogger("LogName")来创建一个logger,此时,这个logger使用root中的配置
  -->
  <logger name="SubscribeHandlerLogger">
   <level value="DEBUG"/>
  </logger>
  <appender name="LogFileAppender" type="log4net.Appender.FileAppender" >
   <param name="File" value="log\Applog.txt" />
   <param name="AppendToFile" value="true" />
   <layout type="log4net.Layout.PatternLayout">
    <param name="ConversionPattern" value="%d [%t] %-5p %c  - %m%n" />
   </layout>
  </appender>
  <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" >
   <LogName value="LogNamex"/> 
   <ApplicationName value="AppNamex"/>
   <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline" />
   </layout>
  </appender>
 </log4net>
</configuration>

/*End///

第一次访问时会自动创建立(应用程序需要运行在System权限下或手动创建)

以上配置可以存放于任何文件中

log4net在开始工作前需要读取配置文件以设置log4net环境,使用log4net.Config.XmlConfigurator.Configure();//使用这个函数的重载形式可以指定文件名,以及决定是否启用文件跟踪,一般在程序启动时调用.Configure()方法。

在asp.net中放在Global.asax文件中的应用程序启动事件中,而windows与控制台程序可以放在程序启动文件Programs.cs中的Main()函数中。

另外也可以在AssemblyInfo.cs文件中加入[assembly: log4net.Config.XmlConfigurator()]

在AssemblyInfo.cs中加入上面的属性后,并不是直接初始化log4net的运行环境,而是在你第一次使用LogManager.GetLogger时由log4net调用XmlConfigurator.Configure()方法,属性只是一个标记,用以提供在调用XmlConfigurator.Configure()方法的的信息--文件名、是否跟踪文件等,log4net系统只会调用一次Configure函数(不过我们可以在执行时调用任意多次Configure以设置自己需要的log4net环境),因此当你在ddl中的AssemblyInfo.cs中指定配置属性,以及在Windows程序或ConsoleApp程序中也配置了app.Config时并且设置了AssemblyInfo.cs时。

假设:

ddl 中有方法

FA(){

ILog log=LogManager.GetLogger("xxx");

}

而在WinForm或ConsoleApp中用方法

FB(){

ILog log=LogManager.GetLogger("yyyy");

}

那么

Main(){

ddl.FA();

FB();

//FB();

//ddl.FA()

}

是有区别的,如果先使用ddl.FA();log4net会设置成在ddl AssembleInfo.cs标记的方式运行。

而先调用FB()再调用ddl.FA(),则使用app.Config中的设置。

一般情况下你没必要为了少写一句XmlConfigurator.Configure();而搞的这么麻烦,通常我们在App.config或Web.Config中配置log4net.

但考虑日渐庞大的app.Config或Web.Config中一大堆的配置不好维护,而将App.config或Web.Config通过.net2.0的configSource进行分离,如:

app.config,或Web.Config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <configSections>
  <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
 </configSections>
 <appSettings configSource="config\appSettings.config"/>
 <log4net configSource="config\log4net.config" />

<!-- 其他配置 -->
</configuration>

/

在应用程序目录下,建立config文件夹在里面放

log4net.config文件,文件内容如:

///

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

<log4net debug="false">....</log4net>

///

在启动时调用log4net.XmlConfigurator.Configure();

注意:使用configSource进行分割后,不能通过AssemblyInfo.cs中的设置来加载log4net的配置信息,而必须手动调用

log4net.XmlConfigurator.Configure();

转载于:https://www.cnblogs.com/wdfrog/archive/2010/05/14/1735300.html

log4net使用注意相关推荐

  1. Log4Net的控制台,WinForm,WebApplication使用

    一.Log4Net的控制台,WinForm,WebApplication使用 1.首先使用nuget 添加log4Net 到控制台项目中 log4j每个符号的具体含义:%d %5p %c{1}:%L ...

  2. log4net 配置参数意思

    二)         Appenders Appenders决定日志输出的方式. Appenders必须实现log4net.Appenders.IAppender接口. Log4net 2 AnsiC ...

  3. 日志记录组件[Log4net]详细介绍(转)

    一 Log4net简介 Log4net是基于.net开发的一款非常著名的记录日志开源组件.他最早是2001年7月由NeoWorks Limited启动的项目,基本的框架源于另外的一个非常著名的姐妹组件 ...

  4. 在.Net程序中使用log4net记录日志(示例)

    log4j是java开发人员所熟悉,他提供了强大的日志记录功能,log4net是为.Net记录日志开发的.使用示例如下(C#): 1.app.config文件 <?xml version=&qu ...

  5. C#使用log4net记录日志

    1.下载 log4net 右键引用,选择 管理NuGet程序包,选择浏览,输入log4net,然后点击下载 2.在App.config中输入内容(不存在自己创建) <?xml version=& ...

  6. 关于log4net日志写入mysql数据库记录

    网上关于log4net日志写入mysql数据库的博客感觉比较少,所以这边搞定之后先过来记录一下. 首先新建个项目,我命名是log4netDemo,然后需要引入两个dll,一个是mysql.dll,一个 ...

  7. 基于Log4net插件

    基本代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using log ...

  8. .net中日至框架log4net.dll如何使用

    首先配置web.config文件 1.添加如下节点 <!--log4net配置 BEGIN--> <configSections>     <section name=& ...

  9. 在ASP.NET MVC中使用Log4Net记录异常日志,出错时导向到静态页

    本篇体验在ASP.NET MVC 4中使用Log4Net记录日志. 通过NuGet安装Log4Net. 需求是:当出错时导向到Error.html静态页面,Log4Net记录错误信息. 大致的思路是: ...

  10. Log4Net五步走

    本文不是教你全面了解log4net,本文只是希望教会你按步就班,照糊芦画瓢般就会用log4net 1,引入log4net.dll组件 2,建立一个配置文件 两种方法,一种是在Web.Config或Ap ...

最新文章

  1. 献给新一代AI后浪们----《后丹》
  2. C#关于值类型和引用类型的备忘
  3. 一文带你读懂Python的5大特点与8大应用方向!
  4. C 语言编程 — 高级数据类型 — 数组
  5. Elixir 1.3带来新的语言功能、API和改进后的工具
  6. svn的更新、合并、提交
  7. ef 排序string转int_排序算法之基本排序算法
  8. Centos ab测试工具
  9. Windows杀死结束进程图形化界面操作方法
  10. 18. OD-反调试研究,破解反调试,编写反调试
  11. 史上最全!计算机科学领域顶会最佳论文大合集:微软研究院最多,清华排24...
  12. Python中默认参数self的理解
  13. matlab covar,Matlab功率谱估计
  14. 自动化测试平台及可视化界面
  15. PowerJob 的自实现高可用方案,妙妙妙!
  16. php artisan command,artisan command 小技巧
  17. Linux配置本机ssh免登陆(解决启动hadoop3.0时报 Permission denied (publickey,password). 错误)
  18. Pycharm创建conda新环境失败问题
  19. java 手写签名,signature java html5+ 手写签名 源码 Develop 238万源代码下载- www.pudn.com...
  20. Android相机的使用

热门文章

  1. JS:ES6-3 解构赋值与模板字符串
  2. Go语言---结构体
  3. c语言的一些字符串库函数的自己实现
  4. 浅谈CSS3中的弹性布局
  5. 苹果官网买的认证翻新机可靠吗?
  6. 你有过什么令你难忘的约会经历?
  7. 为什么古诗我们能读懂,白话诗却一头雾水呢?
  8. 有哪些不怎么火,实际上却很厉害的软件
  9. 投资一个五星级酒店需要多钱?多长时间能回本?
  10. 打着改造传统市场的旗号玩垄断