Log4net 写文件日志与数据库日志
一、数据库日志表结构
- CREATE TABLE [dbo].[WebLog_Msg](
- [LogID] [int] IDENTITY(1,1) NOT NULL,
- [Date] [datetime] NOT NULL,
- [Thread] [nvarchar](255) NULL,
- [Level] [nvarchar](50) NULL,
- [Logger] [nvarchar](255) NULL,
- [Message] [nvarchar](2000) NULL,
- [Exception] [nvarchar](4000) NULL,
- CONSTRAINT [PK_WebLog_Msg] PRIMARY KEY CLUSTERED
- (
- [LogID] ASC
- ))
二、测试类库LoggHelper
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using log4net;
- namespace LogHelper
- {
- public class LoggHelper
- {
- //static LoggHelper()
- //{
- // log4net.Config.XmlConfigurator.Configure();
- //}
- private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(LoggHelper));
- public static void LogInfo()
- {
- log.Info("log日志getretertretrree");
- }
- public static void LogWarn()
- {
- log.Warn("log警告WARNaaaaaaaaaad;");
- }
- public static void LogFatal()
- {
- log.Fatal("log警告WARNaaaaaaaaaad;");
- }
- public static void LogError()
- {
- log.Error("log错误sfsfsfsdfafasdfdsfadffafdsaffasf><><>2eewewjklsfaaaaaaaaaaaaaaaaaaaaaaaaaaaaad;");
- }
- }
- }
三、控制台测试项目
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using LogHelper;
- namespace TestLog4Net
- {
- class Program
- {
- static void Main(string[] args)
- {
- log4net.Config.XmlConfigurator.Configure();
- try
- {
- LoggHelper.LogInfo();
- LoggHelper.LogWarn();
- LoggHelper.LogError();
- LoggHelper.LogFatal();
- Console.ReadLine();
- }
- catch (Exception ex)
- {
- Console.Write(ex);
- }
- }
- }
- }
配置文件内容如下:
- <?xml version="1.0"?>
- <configuration>
- <!--Log4Net config section-->
- <configSections>
- <!--<sectionGroup name="common">
- <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
- </sectionGroup>-->
- <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
- </configSections>
- <!--<common>
- <logging>
- <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net">
- <arg key="configType" value="INLINE"/>
- </factoryAdapter>
- </logging>
- </common>-->
- <log4net>
- <root>
- <!--OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL-->
- <level value="ALL"/>
- <appender-ref ref="AdoNetAppender_SqlServer"/>
- <appender-ref ref="RollingLogFileAppender"/>
- </root>
- <!--<logger name="ErrorInfo">
- <level value="ALL" />
- <appender-ref ref="RollingLogFileAppender" />
- </logger>-->
- <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
- <filter type="log4net.Filter.LevelRangeFilter">
- <levelMin value="Debug" />
- <levelMax value="Info" />
- </filter>
- <param name="File" value="log\errorInfo.txt"/>
- <param name="AppendToFile" value="true"/>
- <param name="MaxSizeRollBackups" value="10"/>
- <param name="MaximumFileSize" value="2MB"/>
- <param name="RollingStyle" value="Size"/>
- <param name="StaticLogFileName" value="true"/>
- <layout type="log4net.Layout.PatternLayout">
- <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
- </layout>
- </appender>
- <appender name="AdoNetAppender_SqlServer" type="log4net.Appender.AdoNetAppender">
- <filter type="log4net.Filter.LevelRangeFilter">
- <levelMin value="Warn" />
- <levelMax value="Fatal" />
- </filter>
- <bufferSize value="0" />
- <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
- <connectionString value="server=XXXXX;database=WebLog;user id=UID;password=PSW;Connect Timeout=15;"/>
- <commandText value="INSERT INTO WebLog_Msg([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
- <parameter>
- <parameterName value="@log_date" />
- <dbType value="DateTime" />
- <layout type="log4net.Layout.RawTimeStampLayout" />
- </parameter>
- <parameter>
- <parameterName value="@thread" />
- <dbType value="String" />
- <size value="255" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%thread" />
- </layout>
- </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="@logger" />
- <dbType value="String" />
- <size value="255" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%logger" />
- </layout>
- </parameter>
- <parameter>
- <parameterName value="@message" />
- <dbType value="String" />
- <size value="2000" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%message" />
- </layout>
- </parameter>
- <parameter>
- <parameterName value="@exception" />
- <dbType value="String" />
- <size value="4000" />
- <layout type="log4net.Layout.ExceptionLayout" />
- </parameter>
- </appender>
- </log4net>
- <!--Log4Net config section end-->
- </configuration>
四、运行结果
1、文件
- 2011-12-31 14:40:17,440 [10] INFO LogHelper.LoggHelper [(null)] - log日志getretertretrree
2、数据库
五、优化log4net在项目中的配置
关注封装日志操作的类库LogHelper:
在AssemblyInfo.cs文件中加入[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Configuration/Log4Net.config", Watch = true)],即加入log4net配置项。
在文件Log4Net.config中配置如下:
- <?xml version="1.0" encoding="utf-8" ?>
- <configuration>
- <!--Log4Net config section-->
- <configSections>
- <!--<sectionGroup name="common">
- <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
- </sectionGroup>-->
- <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
- </configSections>
- <!--<common>
- <logging>
- <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net">
- <arg key="configType" value="INLINE"/>
- </factoryAdapter>
- </logging>
- </common>-->
- <log4net>
- <root>
- <!--OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL-->
- <level value="ALL"/>
- <appender-ref ref="AdoNetAppender_SqlServer"/>
- <appender-ref ref="RollingLogFileAppender"/>
- </root>
- <!--<logger name="ErrorInfo">
- <level value="ALL" />
- <appender-ref ref="RollingLogFileAppender" />
- </logger>-->
- <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
- <param name="File" value="log\errorInfo.txt"/>
- <param name="AppendToFile" value="true"/>
- <param name="MaxSizeRollBackups" value="10"/>
- <param name="MaximumFileSize" value="2MB"/>
- <param name="RollingStyle" value="Size"/>
- <param name="StaticLogFileName" value="true"/>
- <layout type="log4net.Layout.PatternLayout">
- <!--"%d %t %p %l %m %n”:
- 1、%d输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss},输出类似:2005-7-19 17:49:27,刚好适合插入SQLServer;
- 2、%t 产生该日志事件的线程名;
- 3、%p 日志的log_level,如DEBUG、WARN或者INFO;
- 4、%c 输出所属的类目,通常就是所在类的全名,如“iNotes.Default”;
- 5、%m 日志的内容;
- 6、%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。如write2database.main(write2database.java:33);
- 7、%n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”
- -->
- <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
- </layout>
- </appender>
- <appender name="AdoNetAppender_SqlServer" type="log4net.Appender.AdoNetAppender">
- <filter type="log4net.Filter.LevelRangeFilter">
- <levelMin value="Warn" />
- <levelMax value="Fatal" />
- </filter>
- <bufferSize value="0" />
- <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
- <connectionString value="server=XXXX;database=Weblog;user id=UID;password=PSW"/>
- <commandText value="INSERT INTO WebLog_Msg([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
- <parameter>
- <parameterName value="@log_date" />
- <dbType value="DateTime" />
- <layout type="log4net.Layout.RawTimeStampLayout" />
- </parameter>
- <parameter>
- <parameterName value="@thread" />
- <dbType value="String" />
- <size value="255" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%thread" />
- </layout>
- </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="@logger" />
- <dbType value="String" />
- <size value="255" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%logger" />
- </layout>
- </parameter>
- <parameter>
- <parameterName value="@message" />
- <dbType value="String" />
- <size value="255" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%message" />
- </layout>
- </parameter>
- <parameter>
- <parameterName value="@exception" />
- <dbType value="String" />
- <size value="4000" />
- <layout type="log4net.Layout.ExceptionLayout" />
- </parameter>
- </appender>
- </log4net>
- <!--Log4Net config section end-->
- </configuration>
即把应用程序config文件下有关log4net的所有配置项移除放到单一文件Log4Net.config中,这样给应用程序的配置文件“瘦身”不少,呵呵!
ok,编译类库LoggHelper(可在里面封装对log4net的所有操作),将控制台程序改为
- static void Main(string[] args)
- {
- //log4net.Config.XmlConfigurator.Configure(); //注释掉
- try
- {
- LoggHelper.LogInfo();
- LoggHelper.LogWarn();
- LoggHelper.LogError();
- LoggHelper.LogFatal();
- Console.ReadLine();
- }
- catch (Exception ex)
- {
- Console.Write(ex);
- }
- }
运行,一切ok!
附有关log4net的对数据库写日志的配置:
http://logging.apache.org/log4net/release/config-examples.html
Log4net 写文件日志与数据库日志的更多相关文章
- log4net 写数据到sql数据库
最近需要把用户的一些行为添加到数据库中,所以想到了用log4net ,如果有别的好的方案,大家可以给我指正. 先看一下配置文件 我这个是控制台文件 app.config <layout type ...
- Log4Net的应用教程之保存日志到数据库中
关于Log4Net的应用,网上有很多教程,但大多数都是拷贝复制,有些按照他的代码来,运行起来发现也出不来效果,但是Log4net的作用实在是非常大的,或者这里说的不对,应该说系统的日志功能是很重要的也 ...
- log4net 添加自定义日志到数据库
添加操作日志到数据库举例: (一)建立数据库的操作日志表,如下我建立了一个简单的日志表 (二)配置文件中的配置如下 <log4net> <!--错误日志记录数据库--> < ...
- log4net 将日志写入数据库
asp.net利用log4net写入日志到SqlServer数据库,Log4net是一个开源的错误日志记录项目,易用性强,源自log4j,品质值得信赖. 下面就我的安装部署log4net到MS sql ...
- 使用log4net写自定义日志
在使用log4net写Web服务器端日志的时候,通常需要一些自定义的参数,比如请求的url,method,以及用户名等等,而log4net中默认的Log接口只提供了很少的参数. 在网上找的其他的 ...
- 扔掉log4j、log4j2,自己动手实现一个多功能日志记录框架,包含文件,数据库日志写入,实测5W+/秒日志文件写入,2W+/秒数据库日志写入,虽然它现在还没有logback那么强大
讲到log4j,现在国外基本是没有开发者用这个框架了,原因大致有几点,1.功能太少:2.效率低下:3.线程锁bug等等等各种莫名其妙的bug一直都没解决. 其实最重要的是log4j的作者自己也放弃了l ...
- MS SqlServer 通过数据库日志文件找回已删除的记录
1.建立演示数据(创建数据库数据表添加基础数据) 1.1 创建数据库 1.2 创建数据表 1.3填充数据 1.4做数据库完整备份 2.模拟误删除.记录操作时间.备份数据库日志 2.1删除数据并记录操作 ...
- 怎么在.NetCore3.0 中使用Log4net 写日志 及读取配置文件的信息
1:安装Log4Net的 NuGet 包: 我们通常之需要安装这一个包即可,其他的主包会自动被添加进来: insatll-package Microsoft.Extensions.Logging.L ...
- SOME:收缩数据库日志文件,查看表数据量和空间占用,查看表结构索引修改时间
---收缩数据库日志文件 USE [master]ALTER DATABASE yourdatabasename SET RECOVERY SIMPLE WITH NO_WAITALTER DATAB ...
随机推荐
- T-SQL
今天继续数据库知识的梳理.接下来的主要内容是T-SQL,针对的数据库是SQL Server 2008. 几个术语 数据定义语言(DDL,Data Definition Language):用来建立数据 ...
- php用户验证代码的简单例子
发布:sunday01 来源:net [大 中 小] 分享一个简单的php用户验证代码,适合初学的朋友参考,主要学习$_post传递数据及isset检测变量的方法. php简单用户验证代码 ...
- Lucas定理的理解与应用
Lucas定理:用于计算组合数模除素数后的值,其实就是把(n,m)分别表示为p进制,累乘各位的可能取的个数,得到最终的结果: 推论:(n & m) == m则C(n,m)为奇数:即C(n,m) ...
- UML用户指南--UML图简介
本节和大家一起学习一下UML图,这里主要介绍UML结构图和UML行为图两部分,下面让我们一起看一下UML图的详细介绍吧. UML图 这里再次提到对软件体系结构进行可视化.详述.构造和文档化,有5种最重 ...
- JAVA入门第二季(mooc-笔记)
相关信息 /** * @subject <学习与创业>作业1 * @author 信管1142班 201411671210 赖俊杰 * @className <JAVA入门第二季&g ...
- css3 旋转出现动画
@-moz-keyframes daf{ 0% { -moz-transform: rotate(-360deg) scale(0.2); -webkit-transform: rotate(-360 ...
- 小米MIUI 360wifi掉线解决方案 落雨
问: 360WIFI 小米WIFI 联网无网速的解决办法 方法1.退出电脑和手机上的360安全卫士(我抱着试试的态度退出了之后,我艹,速度立马有了!),估计是这些安全软件太强大,导致的. 方法2.我用 ...
- LFI & RFI & PHP封装协议之安全问题研究
目录 . 文件包含的基本概念 . LFI(Local File Include) . RFI(Remote File Include) . PHP中的封装协议(伪协议).PHP的流式文件操作模式所带来 ...
- zepto源码学习-03 $()
在第一篇的时候提到过关于$()的用法,一个接口有很多重载,用法有很多种,总结了下,大概有一以下几种 1.$(selector,context?) 传入一个选择器返回一个zepto对象 2.$(func ...
- webpack打包sass
首先,需要支持sass,不管是有ruby环境的sass,还是node-sass,用npm装的sass模块,bootstrap-sass,gulp-sass..总归要有一个吧!(这里采用node-sas ...