• Logger 日志记录


    1。日记记录主要是当程序出现了BUG时候记录到数据库时候出现了问题。记录不了。就记录到Windows日志里面 具体用法如下:

    需要引入(NuGet)EnterpriseLibrary.Common

        

       public void LogGeneral(GeneralLogEntry logEntry)         {

                var customLogFormatter = new GeneralLogFormatter("ld", "LogGeneral");             //使用代码设置

                if (!EventLog.SourceExists("TCMSSix"))            

        {                

          EventLog.CreateEventSource("TCMSSix", "Application");                 //MessageBox.Show("创建TCMSSix源");            

        }            

        EventLog eventLog = new EventLog("Application", ".", "TCMSSix");             //用TraceListener的派生类来包装            

        var formattedEventLogTraceListener = new FormattedEventLogTraceListener(eventLog, customLogFormatter);            

        var consoleTraceListener = new ConsoleTraceListener();            

        var config = new LoggingConfiguration();             //设置为异步用AddAsynchronousTraceListener            

        config.AddLogSource("Trace", SourceLevels.All, true).AddTraceListener(formattedEventLogTraceListener);            

        config.LogSources["Trace"].AddAsynchronousTraceListener(consoleTraceListener);

                Logger.Reset();            

        Logger.SetLogWriter(new LogWriter(config));            

        Logger.Write(logEntry);

            }

      将错误转化成需要写入Windows日志的字符串

    internal class GeneralLogFormatter : ILogFormatter    

    {        

         private readonly NameValueCollection _attributes;

            public GeneralLogFormatter()        

        {            

            }

            public GeneralLogFormatter(NameValueCollection attributes)         {             _attributes = attributes;         }

            public GeneralLogFormatter(string prefix, string ns)         {         _attributes = new NameValueCollection();      _attributes["prefix"] = prefix;         _attributes["ns"] = ns;         }

            public string Format(LogEntry log)         {            

        GeneralLogEntry logs = (GeneralLogEntry) log; //错误实体类           

        string prefix = _attributes["prefix"];            

        string ns = _attributes["ns"];

           using (var sw = new StringWriter())            

       {                

        var w = new XmlTextWriter(sw);                

        w.Formatting = Formatting.Indented;                

        w.Indentation = 2;                

        w.WriteStartDocument(true);                

        w.WriteStartElement(prefix, "Log", ns);                

        w.WriteAttributeString("ServerKey", ns, 1.ToString());                

        w.WriteElementString("Processor", ns, logs.Processor);                

        w.WriteElementString("InstalledMemory", ns, logs.InstalledMemory.ToString());                

        w.WriteElementString("WindowsEdition", ns, logs.WindowsEdition);               

        w.WriteElementString("SystemType", ns, logs.SystemType);                

        w.WriteElementString("ComputerName", ns, logs.ComputerName);                

        w.WriteElementString("MVirgilUserPkey", ns, logs.MVirgilUserPkey.ToString());             

        .....//错误信息    

        w.WriteEndElement();                

        w.WriteEndDocument();                                          

        return sw.ToString();            

        }        

      }    

    }

    当记录时候需要创建一下

       if (!EventLog.SourceExists("TCMSSix"))            

        {                

       EventLog.CreateEventSource("TCMSSix", "Application");                 //MessageBox.Show("创建TCMSSix源");            

     }    

    同时需要获取管理权限才能创建:
    
    1.新建一个程序清单(.manifest)
    
    2.
    
     <security>      
    
    <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">        
    
    <!-- UAC 清单选项             如果要更改 Windows 用户帐户控制级别,请用以下节点之一替换             requestedExecutionLevel 节点。
    
            <requestedExecutionLevel  level="asInvoker" uiAccess="false" />        
    
        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />        
    
       <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />
    
           指定 requestedExecutionLevel 节点将会禁用文件和注册表虚拟化。            
    
           如果要利用文件和注册表虚拟化实现向后            
    
       兼容性,则删除 requestedExecutionLevel 节点。         -->        
    
      <!--<requestedExecutionLevel level="asInvoker" uiAccess="false" />-->
    
            <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>      
    
    </requestedPrivileges>    
    
    </security>
    待验证的。

    创建源的项写入的日志名可以自定义。也可以系统的。 源名称("TCMSSix")可以创建多个不同的源

    具体的日志文件位置在:C:WindowsSystem32winevtLogs

  • 相关阅读:
    postgres column reference "id" is ambiguous
    网络 内网穿透frp
    odoo12 支付宝在线支付
    odoo 账号登录不上,重置密码也不管用
    odoo 取消保存提示
    聊聊redis分布式锁的8大坑 转载
    用 Keepalived+HAProxy 实现高可用负载均衡的配置方法 转载
    Nginx+keepalived 实现高可用,常用防盗链及动静分离配置 转载
    Git 实用技巧记录 转载:https://mp.weixin.qq.com/s/o6FvGfiG9b57xTeXlBzzQQ
    5 个冷门但非常实用的 Kubectl 使用技巧,99% 的人都不知道 https://mp.weixin.qq.com/s/h4_KRmsVSnlqCmIJh0altA
  • 原文地址:https://www.cnblogs.com/wlwenjie/p/4440837.html
Copyright © 2020-2023  润新知