代码之家  ›  专栏  ›  技术社区  ›  MrLister

如何设置使用rabbit mq客户端登录到本地硬盘驱动器?

  •  0
  • MrLister  · 技术社区  · 8 年前

    有没有办法 以编程方式 打开登录到本地硬盘驱动器?

    (例如:日志到文件C:\ temp\rabbit.log)

    (目录和名称当然会改变)

    换句话说,我希望能够在创建rabbit mq连接时打开(或关闭)日志记录…

    背景: rabbitmq正从我的应用程序中的引用中使用

    在visual studio中,通过nuget右键单击“引用”

    add reference : RabbitMQ.Client.dll (v4.0.30319)
    

    这是我运行rabbit mq客户端的代码。 (消息处理代码已被删除)

    using RabbitMQ.Client;
    using RabbitMQ.Client.Events;
    using RabbitMQ.Client.MessagePatterns;
    
    private void Internal_Run(CancellationToken cancelToken)
    {
        var connectionFactory = new ConnectionFactory();
    
        // I know this is wrong... but this is what I would ***like*** to do:
        // connectionFactory.IsLogging = true;
        // connectionFactory.LogPathAndFile = "C:\\Temp\\Rabbit.log";
    
    
        connectionFactory.HostName = "My Host";
        connectionFactory.UserName = "My userName";
        connectionFactory.Password = "My password";
        string QueueName = "My unique queue name";
    
        try
        {
            using (IConnection connection = connectionFactory.CreateConnection())
            {
                using (IModel model = connection.CreateModel())
                {
                    //Note declare the queue here, as well. Because we might start the receiver before the sender, 
                    // we want to make sure the queue exists before we try to consume messages from it
                    model.QueueDeclare(queue: QueueName, durable: true, exclusive: false, autoDelete: false, arguments: null);
                    var subscription = new Subscription(model, QueueName, false);
    
                    int milisecondTimeOut_RabbitMQ = 500;
                    while (true)
                    {
                        BasicDeliverEventArgs basicDeliveryEventArgs;
                        if (subscription.Next(milisecondTimeOut_RabbitMQ, out basicDeliveryEventArgs))
                        {
                            if (basicDeliveryEventArgs == null)
                            {
                                continue;
                            }
                            if (basicDeliveryEventArgs.Body.Length == 0)
                            {
                                continue;
                            }
    
                            string messageContent = Encoding.UTF8.GetString(basicDeliveryEventArgs.Body);
    
                            subscription.Ack(basicDeliveryEventArgs);  // send the ACK back to queue to let Rabbit know I processed the message
                        }
    
                        if (cancelToken.IsCancellationRequested)
                        {
                            break;
                        }
                    }
                }
            }
        }
        catch (OperationCanceledException oce)
        {
            // this is an expected cancellation - program shutting down
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   MrLister    8 年前

    必须创建自定义nlog配置文件。下面是一个例子:

    <?xml version="1.0" encoding="utf-8" ?>
    <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true"
      throwExceptions="false">
    
    <variable name="AppName" value="ManagerService" />
    <variable name="LogDir" value="Logs" />
    
    <variable name="logFormat_File" value="[${longdate}][${logger}] 
    [${message}${onexception:${newline}EXCEPTION\: ${exception:format=ToString}}]"/>
    <variable name="logFormat_Console" value="${longdate} | ${logger} | 
    ${level:uppercase=true} | ${message}"/>
    <variable name="logFormat_Debugger" value="[${logger}] '${message}'"/>
    
    <targets async="true">
    
    <target xsi:type="File"
            name="Log_Main"
            layout="${logFormat_File}"
            fileName="${basedir}${LogDir}\Main.log"
            keepFileOpen="false"
            archiveFileName="${basedir}${LogDir}\Main_${shortdate}.{##}.bak"
            archiveNumbering="Sequence"
            archiveEvery="Day"
            maxArchiveFiles="30"
            />
    
        <target xsi:type="File"
            name="Log_Timing"
            layout="${logFormat_File}"
            fileName="${basedir}${LogDir}\Timing.log"
            keepFileOpen="false"
            archiveFileName="${basedir}${LogDir}\Timing_${shortdate}.{##}.bak"
            archiveNumbering="Sequence"
            archiveEvery="Day"
            maxArchiveFiles="30"
            />
    
            <target xsi:type="File"
            name="Log_Trans"
            layout="${logFormat_File}"
            fileName="${basedir}${LogDir}\Trans.log"
            keepFileOpen="false"
            archiveFileName="${basedir}${LogDir}\Trans_${shortdate}.{##}.bak"
            archiveNumbering="Sequence"
            archiveEvery="Day"
            maxArchiveFiles="30"
            />
    
    
            <target xsi:type="File"
            name="Error_Log"
            layout="${logFormat_File}"
            fileName="${basedir}${LogDir}\Error.log"
            keepFileOpen="false"
            archiveFileName="${basedir}${LogDir}\Error_${shortdate}.{##}.bak"
            archiveNumbering="Sequence"
            archiveEvery="Day"
            maxArchiveFiles="30"
            />
    
            <target xsi:type="File"
            name="Warn_Log"
            layout="${logFormat_File}"
            fileName="${basedir}${LogDir}\Warn.log"
            keepFileOpen="false"
            archiveFileName="${basedir}${LogDir}\Warn_${shortdate}.{##}.bak"
            archiveNumbering="Sequence"
            archiveEvery="Day"
            maxArchiveFiles="30"
            />
    
            <target xsi:type="File"
            name="DB_Log"
            layout="${logFormat_File}"
            fileName="${basedir}${LogDir}\DB.log"
            keepFileOpen="false"
            archiveFileName="${basedir}${LogDir}\DB_${shortdate}.{##}.bak"
            archiveNumbering="Sequence"
            archiveEvery="Day"
            maxArchiveFiles="30"
            />
    
            <target xsi:type="File"
            name="MQ_Log"
            layout="${logFormat_File}"
            fileName="${basedir}${LogDir}\MQ.log"
            keepFileOpen="false"
            archiveFileName="${basedir}${LogDir}\MQ_${shortdate}.{##}.bak"
            archiveNumbering="Sequence"
            archiveEvery="Day"
            maxArchiveFiles="30"
            />
    
            <target xsi:type="File"
            name="Rest_Log"
            layout="${logFormat_File}"
            fileName="${basedir}${LogDir}\Rest.log"
            keepFileOpen="false"
            archiveFileName="${basedir}${LogDir}\Rest_${shortdate}.{##}.bak"
            archiveNumbering="Sequence"
            archiveEvery="Day"
            maxArchiveFiles="30"
            />
    
            <target xsi:type="File"
            name="BM_Log"
            layout="${logFormat_File}"
            fileName="${basedir}${LogDir}\BM.log"
            keepFileOpen="false"
            archiveFileName="${basedir}${LogDir}\BM_${shortdate}.{##}.bak"
            archiveNumbering="Sequence"
            archiveEvery="Day"
            maxArchiveFiles="30"
            />
    
    
    <target xsi:type="EventLog"
            name="eventlog"
            source="CetrusManagerService"
            log="Cetrus"
            layout="${message}${newline}${exception:format=ToString}"/>
    
    <target name="debugger" xsi:type="Debugger" layout="${logFormat_Debugger}"/>
    
    <target name="console" xsi:type="Console" layout="${logFormat_Console}" />
    
    </targets>
    
    
    <rules>
    <logger name="Manager.Calls.Manager" writeTo="Log_Main" level="Info" />
    
    <logger name="Manager.Calls.Rest" writeTo="Rest_Log" levels="Info,Error" />
    
    <logger name="Manager.Timing.*" writeTo="Log_Timing" level="Info" />
    
    <logger name="Manager.TransactionProcessor.*" writeTo="Log_Trans" levels="Info,Warn,Error" />
    
    <logger name="Manager.Calls.DB" writeTo="DB_Log" levels="Info,Error" />
    
    <logger name="Manager.Calls.MessageQueue" writeTo="MQ_Log" level="Info" />
    
    <logger name="Manager.Calls.BinaryManager" writeTo="BM_Log" level="Info" />
    
    <logger name="*" writeTo="Error_Log" level="Error" />
    
    <logger name="*" writeTo="Warn_Log" level="Warn" />
    
    <logger name="*" writeTo="eventlog" minlevel="Error" />
    
    <logger name="*" writeTo="debugger" minlevel="Trace" />
    
    <logger name="*" writeTo="console" minlevel="Info" />
    
    </rules>
    
    </nlog>