Как написать файл журнала при отправке сообщения на удаленный MQ - PullRequest
0 голосов
/ 10 сентября 2018

Я хочу написать файл журнала в c #. Каждый раз сообщение приходит на удаленный MQ. пример: предположим, что сообщение abcd отправлено на удаленный mq, тогда в файл журнала будет записано, что как 1 сообщение получено в удаленном mq в 10-09-2018 11:30 с указанием времени и даты. Как я могу достичь этого. Можно ли написать такой код? любая подсказка, любая идея, любая ссылка будет полезна. Пожалуйста помоги.

EDIT

        MQQueueManager queueManager;
        MQMessage queueMessage;
        MQGetMessageOptions queueGetMessageOptions;
        MQQueue queue;


        string QueueName;
        string QueueManagerName;
        string ChannelInfo;
        string channelName;
        string PortNumber;
        string transportType;
        string connectionName;

        QueueManagerName = ConfigurationManager.AppSettings["QueueManager"]; 
        QueueName = ConfigurationManager.AppSettings["Queuename"];
        ChannelInfo = ConfigurationManager.AppSettings["ChannelInformation"];
        PortNumber = ConfigurationManager.AppSettings["Port"];
        char[] separator = { '/' };
        string[] ChannelParams;
        ChannelParams = ChannelInfo.Split(separator);
        channelName = ConfigurationManager.AppSettings["Channel"];
        transportType = ConfigurationManager.AppSettings["TransportType"];
        connectionName = ConfigurationManager.AppSettings["ConnectionName"];
        String strReturn = "";

        try
        {
            queueManager = new MQQueueManager(QueueManagerName,
            channelName, connectionName);
            strReturn = "Connected Successfully";

            queue = queueManager.AccessQueue(QueueName,
            MQC.MQOO_INPUT_AS_Q_DEF + MQC.MQOO_FAIL_IF_QUIESCING);
            queueMessage = new MQMessage();
            queueMessage.Format = MQC.MQFMT_STRING;
            queueGetMessageOptions = new MQGetMessageOptions();
            queue.Get(queueMessage, queueGetMessageOptions);
            strReturn = queueMessage.ReadString(queueMessage.MessageLength);
        }
        catch (MQException exp)
        {
            strReturn = "Exception: " + exp.Message;
        }

        string path1 = @"C:\documents\Example.txt";
        System.IO.File.WriteAllText(path1, strReturn);

1 Ответ

0 голосов
/ 10 сентября 2018

Этот вопрос не имеет ничего общего с MQ.Это просто основной вопрос программирования на C #.Существует множество каркасов для C #, которые вы можете использовать.

Вот 2 основных метода входа в C #.Создайте свой собственный класс "Logger" и поместите их в него.

public static void WriteLog(String logFileName, byte[] data)
{
   FileStream fs = null;
   DateTime currentDT = DateTime.Now;
   String header = currentDT.ToString("yyyy/MM/dd HH:mm:ss.fff") + " ";
   String LF = "\n";

   try
   {
      fs = new FileStream(logFileName, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);

      if (fs.CanWrite)
      {
         fs.Write(Encoding.Default.GetBytes(header), 0, header.Length);
         fs.Write(data, 0, data.Length);
         fs.Write(Encoding.Default.GetBytes(LF), 0, LF.Length);
      }
   }
   catch (IOException ex)
   {
      Console.WriteLine(ex.Message);
   }
   finally
   {
      try
      {
         if (fs != null)
            fs.Close();
      }
      catch (IOException ex)
      {
         Console.WriteLine(ex.Message);
      }
   }
}

public static void WriteLog(String logFileName, String data)
{
   FileStream fs = null;
   StreamWriter sw = null;
   DateTime currentDT = DateTime.Now;
   String header = currentDT.ToString("yyyy/MM/dd HH:mm:ss.fff") + " ";
   String LF = "\n";

   try
   {
      fs = new FileStream(logFileName, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);

      if (fs.CanWrite)
      {
         sw = new StreamWriter(fs);
         sw.Write(header);
         sw.Write(data);
         sw.Write(LF);
      }
   }
   catch (IOException ex)
   {
      Console.WriteLine(ex.Message);
   }
   finally
   {
      try
      {
         if (sw != null)
            sw.Close();
      }
      catch (IOException ex)
      {
         Console.WriteLine(ex.Message);
      }

      try
      {
         if (fs != null)
            fs.Close();
      }
      catch (IOException ex)
      {
         Console.WriteLine(ex.Message);
      }
   }
}

Затем в вашем приложении MQ после успешного получения сообщения из очереди вы можете выполнить следующие действия для его регистрации:

Logger.WriteLog("C:\temp\mylog.txt", "message received");
...