2014-11-16 2 views
2

Я пытаюсь отправить сообщение в очередь MSMQ с помощью Log4Net.I потратил много времени, чтобы понять функциональность из сети. Но я не мог найти большой помощи. Ниже мой исходный код:Как отправить данные в очередь MSMQ с помощью Log4Net?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using log4net; 
using log4net.Config; 

namespace MQTest 
{ 
    class Program 
    { 
    private static readonly ILog ilogger = LogManager.GetLogger(""); 
    static void Main(string[] args) 
    { 
     ilogger.Debug("This should go to the queue"); 
     ilogger.Fatal("This should go to the queue"); 
    } 
    } 
} 

app.config

<log4net> 
<appender name="MsmqAppender" type="MQTest.Appender.MsmqAppender, MQTest"> 
<queueName value="private$\test_queue"/> 
<labelLayout value="LOG [%level] %date"/> 
<layout type="log4net.Layout.XmlLayoutSchemaLog4j"/> 
</appender> 
<root> 
    <level value="ALL"/> 
    <appender-ref ref="MsmqAppender" /> 
</root> 
</log4net> 

Когда я отладки кода, я заметил, что IsDebugEnabled = ложь, IsFatalEnabled = ложь и т.д. я не знаю, как для заполнения указанных флагов при использовании MsmqAppender.

Спасибо за вашу помощь

+0

Ваш отредактированный конфиг не включает MsmqAppender, '' – stuartd

+0

Вы пытались с включенной отладкой log4net? – stuartd

+0

Да, я включил log4net.Internal.Debug. Но я не заметил никаких проблем в консольных журналах. System.Diagnostics.Trace ничего не записывал в файл. – Ullan

ответ

0

Вы не получили его настроить правильно.

Вы определили свой appender и зарегистрировали его в файле конфигурации, поэтому, когда вы хотите зарегистрировать что-то, вы просто используете регистратор ILog, который вы получаете из диспетчера журналов, вам не нужно создавать экземпляр logMSMQ:

myLogger.Debug("This should go to the queue"); 

Глядя на Appender и конфигурации, несколько вещей выделяются:

  1. Вы не должны называть XmlConfigurator.Configure(); внутри Appender

  2. Вы не регистрируете Appender в вашей конфигурации правильно: нужно specify it by type and assembly namespace, например: <appender name="MsmqAppender" type="AssemblyNamespace.MSMQTest.LogMSMQ, AssemblyNamespace">

  3. Вы не указали его имя в конфигурации корневого регистратора:

<root> 
    <level value="ALL" /> 
    <appender-ref ref="MsmqAppender" /> 
</root> 

Пока вы его настраиваете, включите log4net internal debugging, так как это поможет вам понять, что происходит.

+0

Я добавил конфигурацию очереди, но ваш код не работает Ullan

+0

Какую работу мы смотрим? Можете ли вы обновить код в вопросе и сообщить подробности о том, что не работает? – stuartd

+0

Я добавил свой новый код, спасибо за вашу помощь – Ullan

Смежные вопросы