net4log 日志管理
使用log4net可以很方便地为应用添加日志功能。应用Log4net,开发者可以很精确地控制日志信息的输出,减少了多余信息,提高了日志记录性能。同时,通过外部配置文件,用户可以不用重新编译程序就能改变应用的日志行为,使得用户可以根据情况灵活地选择要记录的信息。
那么我们如何在Web项目中使用Log4Net呢?
一、基本配置
1、下载Log4Net,地址如下:http://logging.apache.org/log4net/download_log4net.cgi,如下图所示:
2、下载到本地后,进行解压,,并找到对应版本的.NET Framework版本,如下图所示:
3、在项目中添加Log4Net.DLL的引用,如下图所示:
4、在Web项目根目录下创建log4net.config配置文件,如下图所示:
配置文件log4new.config XML代码如下:
- <?xml version="1.0" encoding="utf-8" ?>
- <log4net debug="false">
- <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
- <param name="File" value="Log/AT.log"/>
- <param name="datePattern" value="YY-MM-dd HH:mm"/>
- <param name="AppendToFile" value="true"/>
- <layout type="log4net.Layout.PatternLayout">
- <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
- </layout>
- </appender>
- <appender name="HttpTraceAppender" type="log4net.Appender.ASPNetTraceAppender">
- <layout type="log4net.Layout.PatternLayout">
- <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
- </layout>
- </appender>
- <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
- <layout type="log4net.Layout.PatternLayout">
- <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
- </layout>
- </appender>
- <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
- <file value="log\AT"/>
- <appendToFile value="true"/>
- <rollingStyle value="Date"/>
- <datePattern value="_yyyyMMdd'.log'"/>
- <staticLogFileName value="false"/>
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%d [%t] %-5p %c - %m%n"/>
- </layout>
- </appender>
- <root>
- <level value="INFO"/>
- <!--<level value="ERROR" />-->
- <appender-ref ref="RollingLogFileAppender"/>
- </root>
- </log4net>
5、项目中添加一个LogHelper.cs操作类,这样可以之后的其他页面进行调用,如下图所示:
LogHelper.cs类代码如下:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- [assembly: log4net.Config.XmlConfigurator(Watch = true)]
- namespace APESM_GGJ.CommonClass
- {
- public class LogHelper
- {
- /// <summary>
- /// 输出日志到Log4Net
- /// </summary>
- /// <param name="t"></param>
- /// <param name="ex"></param>
- #region static void WriteLog(Type t, Exception ex)
- public static void WriteLog(Type t, Exception ex)
- {
- log4net.ILog log = log4net.LogManager.GetLogger(t);
- log.Error("Error", ex);
- }
- #endregion
- /// <summary>
- /// 输出日志到Log4Net
- /// </summary>
- /// <param name="t"></param>
- /// <param name="msg"></param>
- #region static void WriteLog(Type t, string msg)
- public static void WriteLog(Type t, string msg)
- {
- log4net.ILog log = log4net.LogManager.GetLogger(t);
- log.Error(msg);
- }
- #endregion
- }
- }
6、在项目中添加一个全局应用程序类Global.asax,如下图所示:
方法中添加如下代码:
- protected void Application_Start(object sender, EventArgs e)
- {
- //应用程序启动时,自动加载配置log4Net
- XmlConfigurator.Configure();
- }
7、打开Web.config文件,添加如下配置信息,如下图所示:
配置文件代码如下:
- <?xml version="1.0" encoding="utf-8"?>
- <!--
- 有关如何配置 ASP.NET 应用程序的详细信息,请访问
- http://go.microsoft.com/fwlink/?LinkId=169433
- -->
- <configuration>
- <configSections>
- <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
- </configSections>
- <log4net configSource="log4net.config"/>
- <system.web>
- <httpModules>
- <!--重写IHttpModule类,需要配置的信息-->
- <!--<add name="FilterModule" type="APESM_GGJ.FilterModule,APESM_GGJ" />-->
- </httpModules>
- <compilation debug="true" targetFramework="4.0" />
- </system.web>
- </configuration>
8、在页面中调用,进行日志写入,如下图所示:
页面调用代码:
- protected void Page_Load(object sender, EventArgs e)
- {
- if (!IsPostBack)
- {
- LogHelper.WriteLog(typeof(Login), "测试在Web项目中使用Log4Net日志!");
- }
- }
9、查看项目根目录下的Log文件夹,可以看见我们写入的日志log文件,如下图所示:
至此在Web项目中使用Log4Net进行日志记录的功能就已经实现了。
---------------------------------------------------------------------------------------------------------------------
二、扩展
上面实现的是将日志写入到文件中,那么如果想写入到数据库中,该如何操作,这里以SQL Server为例,创建一个日志表,然后修改log4net.config文件,如下代码:
- <?xml version="1.0" encoding="utf-8" ?>
- <log4net debug="false">
- <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
- <bufferSize value="10" />
- <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
- <connectionString value="DATABASE=CSDN;SERVER=.;UID=sa;PWD=111111;Connect Timeout=15;" />
- <commandText value="INSERT INTO ErrorLog ([dtDate],[sThread],[sLevel],[sLogger],[sMessage],[sException]) 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="100" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%t" />
- </layout>
- </parameter>
- <parameter>
- <parameterName value="@log_level" />
- <dbType value="String" />
- <size value="200" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%p" />
- </layout>
- </parameter>
- <parameter>
- <parameterName value="@logger" />
- <dbType value="String" />
- <size value="500" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%logger" />
- </layout>
- </parameter>
- <parameter>
- <parameterName value="@message" />
- <dbType value="String" />
- <size value="3000" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%m" />
- </layout>
- </parameter>
- <parameter>
- <parameterName value="@exception" />
- <dbType value="String" />
- <size value="4000" />
- <layout type="log4net.Layout.ExceptionLayout" />
- </parameter>
- </appender>
- <!-- setup the root category, add the appenders and set the default level -->
- <root>
- <level value="WARN"/>
- <level value="INFO"/>
- <level value="DEBUG"/>
- <level value="FINE"/>
- <appender-ref ref="ADONetAppender" />
- </root>
- <!-- specify the level for some specific categories -->
- <logger name="iNotes">
- <level value="WARN"/>
- <level value="INFO"/>
- <level value="DEBUG"/>
- <level value="FINE"/>
- <appender-ref ref="ADONetAppender"/>
- </logger>
- <logger name="StellaLogger">
- <level value="ALL"/>
- <appender-ref ref="AdoNetAppender" />
- </logger>
- </log4net>
注意<bufferSize value="10" /> ,需要注意的一个参数 bufferSize=10 表示是记录10 条到缓冲区,满10条后再写入SQL server;
测试时将其修改为1
生产环境建议100
上面配置节中数据库名,用户名和密码,根据实际情况进行修改。
数据库表ErrorLog创建语句为:
- CREATE TABLE ErrorLog(
- nId bigint IDENTITY(1,1) NOT NULL,
- dtDate datetime NOT NULL,
- sThread nvarchar(100) NOT NULL,
- sLevel nvarchar(200) NOT NULL,
- sLogger nvarchar(500) NOT NULL,
- sMessage nvarchar(3000) NOT NULL,
- sException nvarchar(4000) NULL
- );
如下图所示:
三、整合
想同时保存到日志文件和数据库,log4net.config的文件配置如下XML代码所示:
- <?xml version="1.0" encoding="utf-8" ?>
- <log4net debug="false">
- <!-- 将日志信息写入SQL Server数据库 2015-09-29-->
- <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
- <bufferSize value="1" />
- <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
- <connectionString value="DATABASE=CSDN;SERVER=.;UID=sa;PWD=111111;Connect Timeout=15;" />
- <commandText value="INSERT INTO ErrorLog ([dtDate],[sThread],[sLevel],[sLogger],[sMessage],[sException]) 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="100" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%t" />
- </layout>
- </parameter>
- <parameter>
- <parameterName value="@log_level" />
- <dbType value="String" />
- <size value="200" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%p" />
- </layout>
- </parameter>
- <parameter>
- <parameterName value="@logger" />
- <dbType value="String" />
- <size value="500" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%logger" />
- </layout>
- </parameter>
- <parameter>
- <parameterName value="@message" />
- <dbType value="String" />
- <size value="3000" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%m" />
- </layout>
- </parameter>
- <parameter>
- <parameterName value="@exception" />
- <dbType value="String" />
- <size value="4000" />
- <layout type="log4net.Layout.ExceptionLayout" />
- </parameter>
- </appender>
- <!-- 将日志信息写入到项目日志文件 2015-09-29 -->
- <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
- <param name="File" value="Log/AT.log"/>
- <param name="datePattern" value="YY-MM-dd HH:mm"/>
- <param name="AppendToFile" value="true"/>
- <layout type="log4net.Layout.PatternLayout">
- <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
- </layout>
- </appender>
- <appender name="HttpTraceAppender" type="log4net.Appender.ASPNetTraceAppender">
- <layout type="log4net.Layout.PatternLayout">
- <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
- </layout>
- </appender>
- <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
- <layout type="log4net.Layout.PatternLayout">
- <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
- </layout>
- </appender>
- <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
- <file value="log\AT"/>
- <appendToFile value="true"/>
- <rollingStyle value="Date"/>
- <datePattern value="_yyyyMMdd'.log'"/>
- <staticLogFileName value="false"/>
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%d [%t] %-5p %c - %m%n"/>
- </layout>
- </appender>
- <!--设置根目录,添加appenders并设置默认日志等级 -->
- <root>
- <level value="WARN"/>
- <level value="INFO"/>
- <level value="DEBUG"/>
- <level value="FINE"/>
- <appender-ref ref="ADONetAppender" />
- <appender-ref ref="RollingLogFileAppender"/>
- </root>
- <!-- 为特定的目录指定等级 -->
- <logger name="iNotes">
- <level value="WARN"/>
- <level value="INFO"/>
- <level value="DEBUG"/>
- <level value="FINE"/>
- <appender-ref ref="ADONetAppender"/>
- <appender-ref ref="RollingLogFileAppender"/>
- </logger>
- <logger name="StellaLogger">
- <level value="ALL"/>
- <appender-ref ref="AdoNetAppender" />
- <appender-ref ref="RollingLogFileAppender"/>
- </logger>
- </log4net>
===========================================================================
net4log 日志管理的更多相关文章
- 第13章 Linux日志管理
1. 日志管理 (1)简介 在CentOS 6.x中日志服务己经由rsyslogd取代了原先的syslogd服务.rsyslogd日志服务更加先进,功能更多.但是不论该服务的使用,还是日志文件的格式其 ...
- ABP(现代ASP.NET样板开发框架)系列之8、ABP日志管理
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之8.ABP日志管理 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...
- 【Java EE 学习 76 下】【数据采集系统第八天】【通过AOP实现日志管理】【日志管理功能分析和初步实现】
一.日志管理相关分析 1.日志管理是一种典型的系统级别的应用,非常适合使用spring AOP实现. 2.使用日志管理的目的:对系统修改的动作进行记录,比如对权限.角色.用户的写操作.修改操作.删除操 ...
- ElasticSearch+NLog+Elmah实现Asp.Net分布式日志管理
本文将介绍使用NLOG.Elmah结合ElasticSearch实现分布式日志管理. 一.ElasticSearch简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布 ...
- Apache 日志管理,获取客户端端口号
日志管理分类 日志文件是用户管理和监控 Apache 安全的非常好的第一手资料,它清晰地记录了客户端访问 Apache 服务器资源的每一条记录,以及在访问中出现的错误信息,可以这样说,Apache 可 ...
- linux 学习 14 日志管理
第十四讲 日志管理 14.1 日志管理-简介 .日志服务 在CentOS .x中日志服务已经由rsyslogd取代了原先的syslogd服务.rsyslogd日志服务更加先进,功能更多.但是不论该服 ...
- SQL Server中的事务日志管理(7/9):处理日志过度增长
当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...
- SQL Server中的事务日志管理(9/9):监控事务日志
当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...
- 基于吉日嘎底层架构的Web端权限管理操作演示-日志管理
权限管理要实现的效果是对“ 谁”可以访问“什么内容”,可以进行“哪些操作” 一系列权限的精细化控制.衡量一个软件好坏的重要标准是:它的权限体系是否足够细致.是否可以立体勾勒出信息对象的访问控制.前面4 ...
随机推荐
- 别人的Linux私房菜(5)首次CentOS7与帮助等
ctrl alt F1-F6切换终端tty1-6,其中,F1的终端带有用户界面. 在终端登录后,输入startx启动个人图形界面.(启动有一些条件限制,如没有其他的X Window启用,已经安装,并具 ...
- var
在函数中,使用var声明的变量,为局部变量,只能在函数内部访问. 不使用var声明的变量,为全局变量,在函数外边也能访问. 没有var的情况 <script type="text/ja ...
- docker-compose安装redis-sentinel集群(1主+2副+2哨兵)
前提:本试验环境已经提前安装了docker和docker-compose 说明:本次部署是单机伪集群,想要部署真正的集群,需要将秒个主件拆分到各个机器上去部署,只修改ip地址 1.下载redis的相关 ...
- Clion pycharm激活码(可使用到2019年2月)
D87IQPUU3Q-eyJsaWNlbnNlSWQiOiJEODdJUVBVVTNRIiwibGljZW5zZWVOYW1lIjoiTnNzIEltIiwiYXNzaWduZWVOYW1lIjoiI ...
- async/await让你的代码更加优雅
一. 回调地狱:回调函数里面嵌套着回调函数嵌套着回调函数”,这就是被传说中的“回调地狱callbackHell () { const api = new Api() let user, friends ...
- 发布本地项目和源码到maven私服中
有时候我们会使用第三方包到我们的项目中,但是想看源码的时候,需要下载源码查看,十分麻烦. 不如把源码上传到maven私服中,这样查看源码的时候就可以直接从mvaen nexus下载直接查看了. 方法如 ...
- iOS 不能加载电子签名
问题: 1:使用WKWebView在iOS12.0以上的系统中,可以显示PDF中的电子图章,签名.在iOS12.0以下的系统中不能显示电子签名,图章. 2: 解决方案,使用PDF.js加载. pdf ...
- ElasticSearch 工具类封装(基于ElasticsearchTemplate)
1.抽象接口定义 public abstract class SearchQueryEngine<T> { @Autowired protected ElasticsearchTempla ...
- Linux下安装配置与使用MySQL数据库
Linux下安装配置与使用MySQL数据库 在Linux下安装做开发时往往少不了要使用到MySQL数据库,下面就Linux系统为例讲解一下,如何安装MySQL数据库,如何启用/停.止MySQL服务,如 ...
- [EXP]Drupal < 8.5.11 / < 8.6.10 - RESTful Web Services unserialize() Remote Command Execution (Metasploit)
## # This module requires Metasploit: https://metasploit.com/download # Current source: https://gith ...