【问题标题】:Set up Nlog for seq programmably以可编程的方式为 seq 设置 Nlog
【发布时间】:2018-10-25 05:47:02
【问题描述】:

我需要在 C# 上编写 Nlog 的代码配置,而不是将日志发送到 seq 服务器的 nlog.config。 我不明白我应该使用哪个 Nlog 库来做到这一点。我一直在尝试几种选择,但对我没有用。 nlog.config 代码如下:

  <targets>
      <target name="seq" xsi:type="BufferingWrapper" bufferSize="1000" 
         flushTimeout="2000">
       <target xsi:type="Seq" serverUrl="http://localhost:5341" apiKey="" />
       </target>
   </targets>
   <rules>
     <logger name="*" minlevel="Info" writeTo="seq" />
    </rules>

如果您编写所需的完整代码,我会很高兴。

【问题讨论】:

    标签: c# nlog seq


    【解决方案1】:

    如果我不能使用 XML 文件,这是我的 Nlog 配置器

    定义 Logger 变量:

     private readonly Logger _logger = LogManager.GetCurrentClassLogger();
    

    在类的构造函数中使用它,例如:

    (new NLogConfigurator()).ConfigureSeqBufferTarget();
    

    配置的激活由类自己完成:

    LogManager.Configuration = 配置;

    这里是 NLogConfigurator。我主要是从NLog API得到的

    public class NLogConfigurator
    {
        private readonly string _logFileNamePattern;
        private readonly string _logLayoutPattern;
    
        public NLogConfigurator(string logFileNamePattern)
        {
            _logFileNamePattern = logFileNamePattern;
        }
    
        public NLogConfigurator()
        {
            string addInName = this.GetType().Assembly.GetName().Name;
            _logFileNamePattern = "${specialfolder:folder=CommonApplicationData}/Company/zenon/${processname}_" + addInName  + ".log";
    
            /* Layout of LogMessages:
             * See: https://github.com/nlog/NLog/wiki/Layout-Renderers
             * ${callsite} - The call site (class name, method name and source information).
             * ${message} - The formatted log message.
             * ${onexception} - Only outputs the inner layout when exception has been defined for log message.
             */
            _logLayoutPattern = @"${callsite} ${message} ${onexception:Exception information\:${exception:format=type,message,method,StackTrace:maxInnerExceptionLevel=5:innerFormat=type,message,method,StackTrace}";
        }
    
        public void Configure()
        {
            // See: https://github.com/nlog/NLog/wiki/Configuration-API
    
            // Step 1. Create configuration object 
            var config = new LoggingConfiguration();
    
            // Step 2. Create targets and add them to the configuration
            // See http://sentinel.codeplex.com/ for a log viewer 
            var viewerTarget = new NLogViewerTarget();
            config.AddTarget("viewer", viewerTarget);
    
            var fileTarget = new FileTarget();
            config.AddTarget("file", fileTarget);
    
            // Step 3. Set target properties 
            viewerTarget.Layout = _logLayoutPattern;
            viewerTarget.Address = "udp://127.0.0.1:9999";
            fileTarget.FileName = _logFileNamePattern;
            fileTarget.Layout = _logLayoutPattern;
    
            // Step 4. Define rules
            var rule1 = new LoggingRule("*", LogLevel.Debug, viewerTarget);
            config.LoggingRules.Add(rule1);
    
            var rule2 = new LoggingRule("*", LogLevel.Debug, fileTarget);
            config.LoggingRules.Add(rule2);
    
            // Step 5. Activate the configuration
            LogManager.Configuration = config;
        }
    
    
        public void ConfigureUDPTarget()
        {
            ConfigureUDPTarget(LogLevel.Debug);
        }
    
        public void ConfigureUDPTarget(LogLevel level, string ip = "udp://127.0.0.1:9999")
        {
            // See: https://github.com/nlog/NLog/wiki/Configuration-API
    
            // Step 1. Create configuration object 
            var config = new LoggingConfiguration();
    
            // Step 2. Create targets and add them to the configuration
            // See http://sentinel.codeplex.com/ for a log viewer 
            var viewerTarget = GetNLogViewerTarget(ip);
    
            var fileTarget = new FileTarget();
            config.AddTarget("file", fileTarget);
    
            // Step 3. Set target properties 
            fileTarget.FileName = _logFileNamePattern;
            fileTarget.Layout = _logLayoutPattern;
    
            // Step 4. Define rules
            var rule1 = new LoggingRule("*", level, viewerTarget);
            config.LoggingRules.Add(rule1);
    
            var rule2 = new LoggingRule("*", level, fileTarget);
            config.LoggingRules.Add(rule2);
    
            // Step 5. Activate the configuration
            LogManager.Configuration = config;
        }
    
        public void ConfigureSeqBufferTarget(LogLevel level, 
            string url = "http://localhost:5341", 
            string apiKey = "",
            int bufferSize= 1000,
            int flushTimeout= 2000)
        {
            // See: https://github.com/nlog/NLog/wiki/Configuration-API
    
            // Step 1. Create configuration object 
            var config = new LoggingConfiguration();
            var seqTarget = GetSeqTarget(url, apiKey);
    
            var bufferWrapper = new BufferingTargetWrapper
            {
                Name = "seq",
                BufferSize = bufferSize,
                FlushTimeout = flushTimeout,
                WrappedTarget = seqTarget
            };
    
            config.AddTarget(bufferWrapper);
    
            // Step 4. Define rules
            var rule1 = new LoggingRule("*", level, bufferWrapper);
            config.LoggingRules.Add(rule1);
    
            // Step 5. Activate the configuration
            LogManager.Configuration = config;
        }
    
        private Target GetNLogViewerTarget(string ip = "udp://127.0.0.1:9999")
        {
            return new NLogViewerTarget
            {
                Address = ip,
                Layout = _logLayoutPattern
            };
        }
    
        private Target GetSeqTarget(string url = "http://localhost:5341", string apiKey="")
        {
            return new SeqTarget
            {
                ServerUrl = url,
                ApiKey = apiKey
            };
        }
    
    }
    

    【讨论】:

    • 非常感谢!我使用了代码的底部部分,效果很好:)
    猜你喜欢
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    相关资源
    最近更新 更多