zoukankan      html  css  js  c++  java
  • 微软企业库4.1学习笔记(三十七)日志模块 在应用中使用日志模块

      上图是一个日志模块的基本配置,本节我们就来讲述一些关于他的内容和代码示例。

      默认情况下,在web.config文件中的配置信息是明文的,你可以用.NET自带的加密解密保护机制将配置信息加密,也可以用企业库提供的保护机制。在配置工具中就可以选择,如下图所示

      

         无论你选择那一种,保存之后,你打开web.config文件,就会发现原来明文的日志配置节,变成了下面的加密格式(不用开发者操心解密的事情,用的时候自动解密)。

      

          企业库的日志模块可以将日志信息以多种形式来记录,系统事件、文本文件、电子邮件、事件查看器、数据库、消息队列,xml格式等,如下图所示建立日志记录的形式。

          

          如上图所示,在Trace Listener上点击右键,选择New,然后会出来很多的选项,每一个代表一种记录的形式,也可以说是记录的目的,位置。

          上图是数据库记录日志,需要和数据访模块配合使用,需要一个DatabaseInstance,然后要有两个存储过程,一个是AddCategoryStoreProcedureName,添加分类的存储过程名称;一个是WriteLogStoreProcedureName,往数据库写日志的存储过程名称。

          记录在数据库中的好处就是方便统计、查询,可以借助数据库T-SQL能力进行日志的统计和查询。

          可以用企业库的示例数据库来实验一下数据库记录日志,下图所示就是安装目录的示例sql数据库,在查询分析器中运行一下,建立数据库、表和存储过程

         

          示例数据库如下图

          trace listener、category和数据库访问模块配置如下图

            代码还是最后的示例代码,现在是Trace组又多了一个日志记录的位置,就是刚才配置的数据库。运行代码之后,打开数据库就会发现多了一些记录。

          上图是写文件日志,格式为文本文件,可以设置目录,如上图所示为logs目录下的trace.log文件,filename属性支持一些系统变量,例如:%WINDIR%,%TEMP%,%USERPROFILE%。

          随着系统的使用,日志文件会越来越大,这样的话,一个文件一天之后都会变成几百MB,打都打不开了,而且如果我想删除三个月之前的,怎么办呢?好像没有办法,只有打开文件,进行删除,这也太麻烦了吧。还有就是文件名称,我想在前面添加一个目录,目录是当前日期,例如:2009-9-9,可是好像系统变量%DATE%,在这里不好用,不知道是我用错了,还是怎么回事,希望知道的同学指点一二。

          点击Template后面的。。。就可以打开文件的模板设置,就是文件记录的内容,可以随自己的需要进行调整。

          上面的文本文件记录日志,会碰到两个问题:

          1)随着系统的使用文件越来越大,最好可以每天一个文件,或者每小时一个文件,或者是每10MB一个文件

          2)文件最好自动的放在当天的文件夹下面,然后每个月一个文件夹,这样的话也好处理固定时期的日志,进行删除获取转存到其他地方都可以了。

          第一个问题可以用Roll Flat File Trace Listener来实现,如上图所示,可以设置循环的Interval,RollInterval就是周期,里面有分钟、小时、天、月、年、每天晚上等。RollFileExistsBehavior就是发现同名文件如何处理,可以覆盖或者自增。RollSizeKB就是设置文件的大小,超过大小之后自动创建一个文件,将旧的日志移到创建文件中。

          第二个问题,我也没有找到办法,因为我想是设置filename为%DATE%\trace.log,可是没有起到作用。可以设置为%WINDIR%\trace.log,就会在C:\WINDOWS目录下创建日志文件trace.log。不知道是不是我使用的不对,还是本来就不支持呢?希望知道的同学指点一二,先谢谢了!!!

          有时候我们会觉得记录成xml格式比较好,也可以利用C#进行解析,显示,查询,查看起来也还算方便。但是我遇到一个问题,就是xml trace listener的filename属性不支持相对路径, 前面的设置为trace.log,就会在应用的根目录创建trace.log文件,可是这里如果填上trace.xml,就什么都没有,也不报错,只能用绝对路径f:\mydocument\trace.xml,这样才会在f:\mydocument目录创建trace.xml文件。如上图所示,就可以实现。不知道是我使用的问题,还是本来就不支持呢?也希望知道的同学指点一二,先谢谢了!!!!!

          如上图所示,Category 的作用就好像是将前面设置的trace listener进行分组,就是同时使用一种或者多种日志记录方式,记录数据库的同时可以记录文本文件。就是将记录方式进行分组。

         

          上图的Trace组就包括了四种日志记录形式。

          代码示例

     private void RecordSelectedCategories()
            {
                
                    categories.Add(
    "Trace");
                
                
                
            }
            
    protected void Button1_Click(object sender, EventArgs e)
            {
               RecordSelectedCategories();
                LogEntry log 
    = new LogEntry();
                log.EventId 
    = 100;
                log.Priority 
    = 3;
                log.Message 
    = "information message";
                log.Categories 
    = Categories;
                Dic.Add(
    "1""<log><id>1</id><name>shiwenbin</name></log>");
                Dic.Add(
    "2"2);
                log.ExtendedProperties 
    = Dic;
           
                Logger.Write(log );
              
            }
            
    private IDictionary<stringobject> Dic = new Dictionary<stringobject>();

            [NonSerialized]
            
    private ICollection<string> categories = new List<string>(0);
            [IgnoreMember]
            
    public ICollection<string> Categories
            {
                
    get { return categories; }
                
    set { this.categories = value; }
            }

           首先新建一个LogEntry,设置它的属性,设置日志记录使用的组Category为Trace,

         

    log.Categories = Categories;

           记录日志的时候,就会以Categories中设置的组包含日志类型进行记录。

  • 相关阅读:
    【Azure Redis Cache】对StackExchange.Redis IOCP错误消息的解读
    【Azure Developer】使用REST API获取Activity Logs、传入Data Lake的数据格式问题
    【Azure 存储服务】Blob中数据通过Stream Analytics导出到SQL/Cosmos DB
    【Azure Redis 缓存】Linux VM使用6380端口(SSL方式)连接Azure Redis (redis-cli & stunnel)
    【Azure 应用服务】在Azure App Service for Windows 中部署Java/NodeJS/Python项目时,web.config的配置模板内容
    【Azure Service Bus】 Service Bus如何确保消息发送成功,发送端是否有Ack机制 
    领域驱动实践总结(基本理论总结与分析+架构分析与代码设计+具体应用设计分析V)
    Java三元表达式中的陷阱
    Java有陷阱——慎用入参做返回值
    Eclipse中安装反编译工具Fernflower(Enhanced Class Decompiler)
  • 原文地址:https://www.cnblogs.com/DoNetCShap/p/2295519.html
Copyright © 2011-2022 走看看