1配置Log4net

Log4net的配置文件有几种使用方式,这里将配置log4net的部分独立出来,即关于log4net的配置独立成文件log4net.config。

1)写入Mysql

log4net.config文件配置

<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections> <log4net>
<logger name="ErrorLog">
<level value="Error"/>
<appender-ref ref="ErrorAppender"/>
</logger> <logger name="OperationLog">
<level value="Info"/>
<appender-ref ref="OperationAppender"/>
</logger> <appender name="ErrorAppender" type="log4net.Appender.ADONetAppender"> <bufferSize value="1"/> <connectionType value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data" />
<connectionString value="Database=log;Data Source=192.168.107.13;User Id=root;Password=cnki2017;CharSet=utf8;port=3306"/> <commandText value="INSERT INTO errorlogs (`InsertTime`,`Level`,`Message`,`ExceptionMessage`) VALUES (@log_date, @log_level, @message, @exception)"/>
<parameter>
<parameterName value="@log_date"/>
<dbType value="DateTime"/>
<layout type="log4net.Layout.RawTimeStampLayout"/>
</parameter>
<parameter>
<parameterName value="@log_level"/>
<dbType value="String"/>
<size value="50"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level"/>
</layout>
</parameter>
<parameter>
<parameterName value="@exception"/>
<dbType value="String"/>
<size value="4000"/>
<layout type="log4net.Layout.ExceptionLayout"/>
</parameter>
<parameter>
<parameterName value="@message"/>
<dbType value="String"/>
<size value="2000"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message"/>
</layout>
</parameter>
</appender>
</log4net>
</configuration>

在控制台程序中使用:

class Program
{
static void Main(string[] args)
{
try
{
var path = string.Format("{0}{1}", System.AppDomain.CurrentDomain.BaseDirectory, "Log4net.config");
ICollection c = log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(path));
ILog log = log4net.LogManager.GetLogger("ErrorLog");
log.Error("wwwww", new Exception("测试抛出"));
}
catch (Exception e)
{
Console.WriteLine(e.Message);
} }
}

运行上面的代码,成功地将数据记录到数据库中。

2)写入日志文件

appender配置节说明

file

string

日志文件存放位置,可以为绝对路径也可以为相对路径

appendToFile

boolean

是否追加到已有的日志文件中

rollingStyle

Size/Date

切分日志的模式。Size:按大小切分,Date按日期切分

maxSizeRollBackups

int

当rollingStyle为Size模式时,指定备份日志文件的最大切分数量,如果超过指定值,日志将进行覆写。

maximumFileSize

int

当rollingStyle为Size模式时,指定每个切分日志文件的大小

datePattern

string

当rollingStyle为Date模式时,日志文件名称的一部分,可设置时间格式。

staticLogFileName

boolean

指定是否为静态文件名。

若指定为true,那么文件名以file 中定义的文件名为准。

若为false,当rollingStyle为Date模式时,文件名为file 和datePattern共同构成的

layout

输出日志的样式

其下的配置节conversionPattern

控制着输出的样式

lockingModel

string

最小锁定模型以允许多个进程可以写入同一个文件

encoding

string

文件编码

示例:

<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<log4net>
<appender name="TxtLogRollingFileAppender"
type="log4net.Appender.RollingFileAppender">
<file value="log\\RollingFile" />
<appendToFile value="true" />
<rollingStyle value="date" />
<datePattern value="yyyy-MM-dd&quot;.log&quot;"/>
<staticLogFileName value="false"/>
<encoding value="utf-8" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<param name="conversionPattern" value="时间:%date%newline 线程:[%thread]%newline日志类型:%-5level%newline内 容:%message" />
<param name="header" value=" ------------开始 --------------- " />
<param name="footer" value=" ------------- 结束 ------------ " />
</layout>
</appender>
</log4net>
</configuration>

Main函数中:

ICollection c = log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(@"E:\projgxz_myself\Log4NetTest\Log4net.config"));
ILog log = log4net.LogManager.GetLogger("TxtLogRollingFileAppender");
log.Info("测试输出信息");
Console.Read();

2遇到的问题

1)数据库的访问。

当访问的数据库不存在或表不存在或连接配置不正确时,并不会抛出异常。

2)不会返回配置文件信息集合。

ICollection c = log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(path));

这行代码返回值是ICollection,然而并不会获得配置文件信息,返回的集合居然是空。

3)配置文件路径不正确。

当所指定的配置文件路径不正确时也不会抛出异常,这给调试增加了难度。

4)配置日志类型与使用的方法不一致。

将上面的配置节:

<logger name="ErrorLog">

<level value="Error"/>

<appender-ref ref="ErrorAppender"/>

</logger>

改为下面这样,而其他代码不变,运行程序发现无法写入,但是系统不会抛出异常,也没有任何提示。

<logger name="ErrorLog">

<level value="Info"/>

<appender-ref ref="ErrorAppender"/>

</logger>

5)回滚文件锁定模式

如果如下这么配置,系统会抛异常,但是无法用try-catch捕获,但可在控制台查看到。

<lockingModel type="log4net.Appender.RollingFileAppender+MinimalLock" />

6)写文本文件的问题

若rollingStyle配置节的值为date,那么maxSizeRollBackups、maximumFileSize对日志文件没有任何影响。

log4net使用注意事项的更多相关文章

  1. ibatis + log4net 配置注意事项

    一 在web.config或app.config中配置 <configuration> <configSections> <sectionGroup name=" ...

  2. Log4net 配置注意事项

    1. 首先引入Log4net程序集 2.修改webconfig配置文件 在 configuration 节点下面添加如下节点 <configSections> <section na ...

  3. log4net使用流程

    前面大致介绍了一下log4net的概述和结构.既然都清楚了,下面我来介绍一下如何使用log4net. 使用流程 1.这里所说的使用流程就是使用log4net.dll,首先要根据你的平台来找出对应的版本 ...

  4. log4net注意事项

    log4net的配置信息可以直接配置在系统的配置文件中,也可以单独写一个配置文件,文件名随便起,如log4net.config,单独的文件属性“复制到输出目录”应该是true.因为log4net框架会 ...

  5. Log4net快速索引参考

    官方项目地址:The Apache log4net project 本文内容仅为相关项参考,不进行具体使用讨论 另转载请注明出处 Log4net快速索引参考 Log4net主要有以下三个部件: log ...

  6. log4Net(写入日志文件)

    这里就简单介绍下log4Net对写入日志文件的一些了解,写入数据库类似,就不在一一介绍了. 首先去log4net下载. 然后我们新建一个控制台应用程序,并引入log4net.dll程序集,log4ne ...

  7. Log4Net

    注意事项 <!-- The file log4Net.config is copied into bin/Debug /release by compiler 添加如下内容到 assemblyi ...

  8. 日志学习系列(二)——Log4net的实例

    一.log4net简单实例创建步骤如下 1.第一步:在项目中添加对log4net.dll的引用,这里引用版本是2.0.8.0 2.第二步:程序启动时读取log4net的配置文件. 读取log4net的 ...

  9. 关于Log4Net的使用及配置方式

    目录 0.简介 1.安装程序包 2.配置文件示例 3.日记的级别:Level 4.日志的输出源:Appenders 5.日志格式:Layout 6.日志文件变换方式(回滚方式):RollingStyl ...

随机推荐

  1. JS中OOP之模拟封装和继承和this指向详解

    大家好,今天我带大家学习一下js的OOP, 大家都知道,面向对象有三个基本特征,继承,封装和多态,面向对象的语言有那么几种,C++,PHP,JAVA等,而功能强大的JS可以模拟实现面向对象的两大特征, ...

  2. bootstrap select多选

    1.页面效果 <div class="form-group"> <div class="col-md-2 control-label"> ...

  3. 基于winsocket的框体Server和Client

    前面学了一点Winsock的知识,会编写简单的Server和Client,现在就想通过VS2008编写框体的Server和Client,而不是在控制台上的操作了,毕竟学编程就是要多加练习,在实践中发现 ...

  4. VS2008 C++ 利用WinHttp API获取任意Http网址的源码

    最近一直在看有关Http的知识,对其基本的理论知识已经有所掌握,想通过一个C++具体的例子进行实际操作..于是上网查找了很多资料,发现在Windows系统上,可以通过WinHttp API接口开啊Ht ...

  5. D - Zhenya moves from the dormitory URAL - 2015

    After moving from his parents’ place Zhenya has been living in the University dormitory for a month. ...

  6. 2015-2016 ACM-ICPC, NEERC, Southern Subregional Contest I Lottery

    LotteryCrawling in process... Crawling failed Time Limit:2000MS     Memory Limit:524288KB     64bit ...

  7. JavaScript 中对变量和函数声明的“提前(hoist)”

    hoist vt.升起,提起; vi.被举起或抬高; n.起重机,升降机; 升起; <俚>推,托,举; 这篇文章不讲英语,但是对于某些英语单词找不到很好的翻译,一上来就列出“hoist”这 ...

  8. 关于jQuery.click()函数

    最近接手了前同事的项目,关于使用线程控制实现代码热插拔功能! 在线程中,使用了ChatWebSocketHandler,与前台进行实时交互,今天我拿到需求是这样的,结合chatWebSocketHan ...

  9. Python datetime之timedelta

    该函数表示两个时间的间隔 参数可选.默认值都为0:datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minut ...

  10. web前端-----第一弹html

    HTML 初识 web服务本质 import socket def main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s ...