惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog RSS Feed
量子位
Y
Y Combinator Blog
大猫的无限游戏
大猫的无限游戏
B
Blog
U
Unit 42
C
Check Point Blog
I
InfoQ
aimingoo的专栏
aimingoo的专栏
雷峰网
雷峰网
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 【当耐特】
人人都是产品经理
人人都是产品经理
The Cloudflare Blog
H
Help Net Security
MongoDB | Blog
MongoDB | Blog
博客园 - Franky
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
Microsoft Azure Blog
Microsoft Azure Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
云风的 BLOG
云风的 BLOG
宝玉的分享
宝玉的分享
爱范儿
爱范儿

博客园 - 斧头帮少帮主

猜一猜,会输出什么? ASP.NET错误处理的两种方案_AX Log4Net最简单的使用配置_AX 一个修改后的JS日历(Calendar)控件_AX - 斧头帮少帮主 - 博客园 页面回传(PostBack)后恢复滚动条的位置_AX - 斧头帮少帮主 - 博客园 Hidden Field 的值不能回传(PostBack)到后台_AX Delegate(代理)异常:该委托必须有一个目标 WCF学习随笔6--Version变更--我们在前进_AX WCF学习随笔5--我知道:Known--可憐的孩子_AX WCF学习随笔4--契约|序列化详解--祭斧_AX WCF学习随笔3--第一个Sample--祭斧_AX - 斧头帮少帮主 - 博客园 WCF学习随笔2--Contract--磨斧_AX WCF学习随笔1--扫盲--磨斧_AX 把项目运行情况写入系统日志(Log)的三种方法【续】_AX 为用户控件User Control添加事件_AX XML常用操作总结_AX DataTable常用操作总结_AX - 斧头帮少帮主 - 博客园 .NET(C#)代码性能优化_AX - 斧头帮少帮主 - 博客园 Panel的不足及弥补_AX - 斧头帮少帮主 - 博客园
把项目运行情况写入系统日志(Log)的三种方法_AX
斧头帮少帮主 · 2007-12-17 · via 博客园 - 斧头帮少帮主

学习完王磊先生的文章:ASP.NET 2.0中的健康监测系统(Health Monitoring)
http://www.cnblogs.com/webabcd/archive/2007/05/20/753507.html
就有了这篇文章

目前基本了解到写入系统日志的方法有三种:
①EIF(Enterprise Implementation Framework),很强大的工具,我上项目中已使用.
我自己创建了一个Web Site项目,进行配置,搞了半天,失败!
难道Web Site项目不适合用EIF,还是本人愚钝,高手的说话.
这里有详细的配置步骤:

http://msdn2.microsoft.com/en-us/library/ms979206.aspx

②我自己写了个DLL,感觉很好用!
(基本为王磊先生文章的一个扩展)
    1.创建一个Web Site项目.
    2.引入DLL(LogLibrary_AX.dll)
    3.使用Log类的LogInfo/LogWarning方法进行日志的写入.使用代码如下:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

//This is my DLL,need import.
using LogLibrary_AX;

public partial class _Default : System.Web.UI.Page
{
    
protected void Page_Load(object sender, EventArgs e)
    
{
        
//Write information
        Log.LogInfo("Page load starting",this);

        
try
        
{
            Log.LogInfo(
"Come on,baby!"this);
            
int i = 0;
            
//There will throw an exception.
            int j = 1 / i;
        }

        
catch (Exception ex)
        
{     
            
//Write warning type information
            Log.LogWarning("Hello Warning! Page load has an error!",this,ex);
        }


        Log.LogInfo(
"Page load process end.",this);
    }

}


    4.配置Web.config
      添加 HealthMonitoring 节点

<?xml version="1.0"?>
<configuration>
    
<appSettings/>
    
<connectionStrings/>
    
<system.web>
           
<!--添加 HealthMonitoring 节点开始-->
        
<healthMonitoring>
            
<eventMappings>
                
<add name="AX" type="LogLibrary_AX.LogInfo"/>
            
</eventMappings>
            
<rules>
                
<add name="rule_AX" eventName="AX" provider="EventLogProvider"/>
            
</rules>
        
</healthMonitoring>    
        
<!--添加 HealthMonitoring 节点结束-->
        
<compilation debug="true"/>        
        
<authentication mode="Windows"/>        
    
</system.web>
</configuration>

LogLibrary_AX.dll源码如下
(下载链接:https://files.cnblogs.com/AXzhz/LogLibrary_AX.rar)

using System;
using System.Web.Management;

namespace LogLibrary_AX
{

    
public class LogInfo : WebAuditEvent
    
{
        
        
public LogInfo(string message, object eventSource)
            : 
base(message, eventSource, WebEventCodes.WebExtendedBase + 8888)
        
{
        }

    }


    
public class LogWarning : WebBaseErrorEvent
    
{
        
public LogWarning(string message, object eventSource,Exception exception)
            : 
base(message, eventSource, WebEventCodes.WebExtendedBase + 9999,exception)
        
{
        }

    }


    
//外观模式
    public class Log
    
{
        
public static void LogInfo(string message, object eventSource)
        
{
            
new LogInfo(message, eventSource).Raise();
        }
      

        
public static void LogWarning(string message, object eventSource,Exception exception)
        
{
            
new LogWarning(message, eventSource,exception).Raise();
        }

    }

}


运行结果:

③使用Diagnostics.EventLog类,很easy的方法.我不想用的说.
参见:http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpref/html/frlrfsystemdiagnosticseventlogclasstopic.asp

---------------------------------------------------
【总结】
方法①很好,很强大.
方法②不能出带红×的信息类型,也不能创建一个和Application同级的节点.(会的说话)
方法③可以创建一个和Application同级的节点,参见上图MyNowLog节点,但是好像出来的类型都是Information
(会出别的的说话)

博客园斧头帮少帮主