log4net使用注意事项
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".log""/>
<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使用注意事项的更多相关文章
- ibatis + log4net 配置注意事项
一 在web.config或app.config中配置 <configuration> <configSections> <sectionGroup name=" ...
- Log4net 配置注意事项
1. 首先引入Log4net程序集 2.修改webconfig配置文件 在 configuration 节点下面添加如下节点 <configSections> <section na ...
- log4net使用流程
前面大致介绍了一下log4net的概述和结构.既然都清楚了,下面我来介绍一下如何使用log4net. 使用流程 1.这里所说的使用流程就是使用log4net.dll,首先要根据你的平台来找出对应的版本 ...
- log4net注意事项
log4net的配置信息可以直接配置在系统的配置文件中,也可以单独写一个配置文件,文件名随便起,如log4net.config,单独的文件属性“复制到输出目录”应该是true.因为log4net框架会 ...
- Log4net快速索引参考
官方项目地址:The Apache log4net project 本文内容仅为相关项参考,不进行具体使用讨论 另转载请注明出处 Log4net快速索引参考 Log4net主要有以下三个部件: log ...
- log4Net(写入日志文件)
这里就简单介绍下log4Net对写入日志文件的一些了解,写入数据库类似,就不在一一介绍了. 首先去log4net下载. 然后我们新建一个控制台应用程序,并引入log4net.dll程序集,log4ne ...
- Log4Net
注意事项 <!-- The file log4Net.config is copied into bin/Debug /release by compiler 添加如下内容到 assemblyi ...
- 日志学习系列(二)——Log4net的实例
一.log4net简单实例创建步骤如下 1.第一步:在项目中添加对log4net.dll的引用,这里引用版本是2.0.8.0 2.第二步:程序启动时读取log4net的配置文件. 读取log4net的 ...
- 关于Log4Net的使用及配置方式
目录 0.简介 1.安装程序包 2.配置文件示例 3.日记的级别:Level 4.日志的输出源:Appenders 5.日志格式:Layout 6.日志文件变换方式(回滚方式):RollingStyl ...
随机推荐
- LeetCode 442. Find All Duplicates in an Array (在数组中找到所有的重复项)
Given an array of integers, 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others ...
- 使用 Hadoop 进行语料处理(面试题)
原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7751741.html ------------------------------------ ...
- 解决IDEA Struts2 web.xml问题
用IDEA整合SSH时,在web.xml中配置Struts2核心过滤器--"<filter-class>org.apache.struts2.dispatcher.ng.filt ...
- PyCharm 如何安装python第三方库及插件
一.如何安装python第三方库: 1.有一个专门可下载安装第三方库的网址: http://www.lfd.uci.edu/~gohlke/pythonlibs/ Ctrl+f 搜索要下载的第三方库, ...
- 利用python基于微博数据打造一颗“心”
一年一度的虐狗节将至,朋友圈各种晒,晒自拍,晒娃,晒美食,秀恩爱的.程序员在晒什么,程序员在加班.但是礼物还是少不了的,送什么好?作为程序员,我准备了一份特别的礼物,用以往发的微博数据打造一颗&quo ...
- 编译安装PHP 时遇到问题解决方法.
编译安装PHP时出现下面的错误代码: error 2 checking for pkg-config... /usr/bin/pkg-config configure: error: Cannot f ...
- 开发环境MAPLAB下使用仿真器ICD2程序下载流程
程序下载流程 一. 连接示意图 二. 下载步骤 1.目标板电源断开 2.将仿真器下载端口与电路板JTAG端口有效连接 3.启动MPLAB软件 4.点击MAPLAB软件上方Programme ...
- NHibernate 慎用Session.Merge
Session.Merge其意思有两个步骤, 一般用法: Session.Merge(obj); 1. 从当前的Session中获取obj对象, 如果未获取到则从数据库获取. 2. 把程序中的obj的 ...
- React + Node 单页应用「二」OAuth 2.0 授权认证 & GitHub 授权实践
关于项目 项目地址 预览地址 记录最近做的一个 demo,前端使用 React,用 React Router 实现前端路由,Koa 2 搭建 API Server, 最后通过 Nginx 做请求转发. ...
- JAVA_读取XML文件
在项目中,很多种情况都需要将一些配置写在xml文件或者properties文件里,便于日后修改配置,好维护等等. 1.新建xml文件 <?xml version="1.0" ...