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. PhiloGL学习(5)——神说要有光,便有了光

    前言 上一篇文章中介绍了如何创建三维对象及加载皮肤,本文为大家介绍如何为场景添加光源. 一. 原理分析 光在任何地方都是非常重要的,无论在哪里都说是要发光发热,光和热也是分不开的.光线分为点光源和线光 ...

  2. Django1.11搭建一个简易上传显示图片的后台

    本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 项目展示需要,之前没研究过Django,网上查资料快速做了一个后台,写下了防止自己忘了. p ...

  3. iOS下OpenCV开发用OC还是Swift

    本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 其实标题中这个问题并不准确,准确的说法应该是iOS下的OpenCV开发是使用OC还是Swift ...

  4. linux C 文件操作之fgets()

    1. fgets(...)从标准设备读数据.      原型:fgets(s,n,stdin);      假设在控制台下,我们可以用fgets(...)替代gets(),读入键盘输入的信息,fget ...

  5. Linux替换命令

    :s/^.*$/\L&/100 ##将100行内的小写转换成大写 vi/vim 中可以使用 :s 命令来替换字符串. :s/vivian/sky/ 替换当前行第一个 vivian 为 sky ...

  6. Java多线程Master-Worker模式

    Java多线程Master-Worker模式,多适用于需要大量重复工作的场景中. 例如:使用Master-Worker计算0到100所有数字的立方的和 1.Master接收到100个任务,每个任务需要 ...

  7. 从成本角度看Java微服务

    近年来,微服务因其良好的灵活性和伸缩性等特点备受追捧,很多公司开始采用微服务架构或将已有的单体系统改造成微服务.IBM也于近日开源了轻量级Java微服务应用服务器 Open Liberty .但是采用 ...

  8. JavaScript系列----数据类型以及传值和传引用

    1.简单数据类型 在JavaScript中简单数据类型分为5种.分别为 Undefined, Null,Boolean,Number,String. Undefined类型Undefined类型只有一 ...

  9. Dev控件 galleryControl

    发现一个规律,不会的控件先拖到界面上,右上角需要add 的就对应add一个.然后就是找属性和集合手动添加几个. 然后把XXXForm.Designer.cs 里面的代码提取到逻辑代码中,就把常量换成变 ...

  10. java环境变量和tomcat环境变量配置

    一.JAVA环境变量的配置1.首先下载JDK JDK可以在Oracle(甲骨文)公司的官方网站http://www.oracle.com下载2.安装完成后查看JDK安装路径一般是C:\Program ...