Mono on Linux: Event Logging












0















I am working on getting C# applications written for Windows to run on Linux using Mono. I am using Mono 5.18.0.240 from the Mono repository, on Ubuntu 18.04.1.



My understanding is that Mono includes a local file-based event logger. By setting the environment variable MONO_EVENTLOG_TYPE to local (followed by an optional path), events are logged to a file-based log. However, logged events seem to not be sorted into the correct source directory that gets created. This makes it so that all events are logged to the same directory, which makes it more difficult to navigate through the files should many events be logged.



Consider this C# program that just logs two events each for three event sources:



using System;
using System.Diagnostics;

namespace EventLogTest
{
class Program
{
public static void Main()
{
var sources = new string { "source1", "source2", "source3" };

foreach(var source in sources){
if(! EventLog.SourceExists(source)) EventLog.CreateEventSource(source, "Application");

EventLog log = new EventLog();
log.Source = source;

log.WriteEntry("some event");
log.WriteEntry("another event");
}
}
}
}


We can build the program into an executable and then run it:



$ csc events.cs
Microsoft (R) Visual C# Compiler version 2.8.2.62916 (2ad4aabc)
Copyright (C) Microsoft Corporation. All rights reserved.
$ MONO_EVENTLOG_TYPE=local:./eventlog mono ./events.exe


The resulting structure of the eventlog directory looks like this:



$ tree ./eventlog
./eventlog
└── Application
├── 1.log
├── 2.log
├── 3.log
├── 4.log
├── 5.log
├── 6.log
├── Application
├── source1
├── source2
└── source3

5 directories, 6 files


Note that the directories source1, source2, and source3 were created, but the six log files were placed in the top level Application directory instead of the source directories. If we look at the source field of each log file, we can see that the source is correct:



$ grep -a Source ./eventlog/Application/*.log
eventlog/Application/1.log:Source: source1
eventlog/Application/2.log:Source: source1
eventlog/Application/3.log:Source: source2
eventlog/Application/4.log:Source: source2
eventlog/Application/5.log:Source: source3
eventlog/Application/6.log:Source: source3


My expectation is that the above directory structure should look like this instead, considering that each event log source had two events written (and I don't see the point of the second Application directory):



./eventlog
└── Application
├── source1
│   ├── 1.log
│   └── 2.log
├── source2
│   ├── 1.log
│   └── 2.log
└── source3
├── 1.log
└── 2.log


Now, I know that the obvious solution might be to use a logging solution other than Mono's built-in event logging. However, at this point, it is important that I stick with the built-in tools available.



Is there a way to configure Mono's built-in local event logging to save the events to log files in the relevant source directory, or is this possibly a bug in Mono?










share|improve this question















migrated from superuser.com Jan 28 at 21:20


This question came from our site for computer enthusiasts and power users.























    0















    I am working on getting C# applications written for Windows to run on Linux using Mono. I am using Mono 5.18.0.240 from the Mono repository, on Ubuntu 18.04.1.



    My understanding is that Mono includes a local file-based event logger. By setting the environment variable MONO_EVENTLOG_TYPE to local (followed by an optional path), events are logged to a file-based log. However, logged events seem to not be sorted into the correct source directory that gets created. This makes it so that all events are logged to the same directory, which makes it more difficult to navigate through the files should many events be logged.



    Consider this C# program that just logs two events each for three event sources:



    using System;
    using System.Diagnostics;

    namespace EventLogTest
    {
    class Program
    {
    public static void Main()
    {
    var sources = new string { "source1", "source2", "source3" };

    foreach(var source in sources){
    if(! EventLog.SourceExists(source)) EventLog.CreateEventSource(source, "Application");

    EventLog log = new EventLog();
    log.Source = source;

    log.WriteEntry("some event");
    log.WriteEntry("another event");
    }
    }
    }
    }


    We can build the program into an executable and then run it:



    $ csc events.cs
    Microsoft (R) Visual C# Compiler version 2.8.2.62916 (2ad4aabc)
    Copyright (C) Microsoft Corporation. All rights reserved.
    $ MONO_EVENTLOG_TYPE=local:./eventlog mono ./events.exe


    The resulting structure of the eventlog directory looks like this:



    $ tree ./eventlog
    ./eventlog
    └── Application
    ├── 1.log
    ├── 2.log
    ├── 3.log
    ├── 4.log
    ├── 5.log
    ├── 6.log
    ├── Application
    ├── source1
    ├── source2
    └── source3

    5 directories, 6 files


    Note that the directories source1, source2, and source3 were created, but the six log files were placed in the top level Application directory instead of the source directories. If we look at the source field of each log file, we can see that the source is correct:



    $ grep -a Source ./eventlog/Application/*.log
    eventlog/Application/1.log:Source: source1
    eventlog/Application/2.log:Source: source1
    eventlog/Application/3.log:Source: source2
    eventlog/Application/4.log:Source: source2
    eventlog/Application/5.log:Source: source3
    eventlog/Application/6.log:Source: source3


    My expectation is that the above directory structure should look like this instead, considering that each event log source had two events written (and I don't see the point of the second Application directory):



    ./eventlog
    └── Application
    ├── source1
    │   ├── 1.log
    │   └── 2.log
    ├── source2
    │   ├── 1.log
    │   └── 2.log
    └── source3
    ├── 1.log
    └── 2.log


    Now, I know that the obvious solution might be to use a logging solution other than Mono's built-in event logging. However, at this point, it is important that I stick with the built-in tools available.



    Is there a way to configure Mono's built-in local event logging to save the events to log files in the relevant source directory, or is this possibly a bug in Mono?










    share|improve this question















    migrated from superuser.com Jan 28 at 21:20


    This question came from our site for computer enthusiasts and power users.





















      0












      0








      0








      I am working on getting C# applications written for Windows to run on Linux using Mono. I am using Mono 5.18.0.240 from the Mono repository, on Ubuntu 18.04.1.



      My understanding is that Mono includes a local file-based event logger. By setting the environment variable MONO_EVENTLOG_TYPE to local (followed by an optional path), events are logged to a file-based log. However, logged events seem to not be sorted into the correct source directory that gets created. This makes it so that all events are logged to the same directory, which makes it more difficult to navigate through the files should many events be logged.



      Consider this C# program that just logs two events each for three event sources:



      using System;
      using System.Diagnostics;

      namespace EventLogTest
      {
      class Program
      {
      public static void Main()
      {
      var sources = new string { "source1", "source2", "source3" };

      foreach(var source in sources){
      if(! EventLog.SourceExists(source)) EventLog.CreateEventSource(source, "Application");

      EventLog log = new EventLog();
      log.Source = source;

      log.WriteEntry("some event");
      log.WriteEntry("another event");
      }
      }
      }
      }


      We can build the program into an executable and then run it:



      $ csc events.cs
      Microsoft (R) Visual C# Compiler version 2.8.2.62916 (2ad4aabc)
      Copyright (C) Microsoft Corporation. All rights reserved.
      $ MONO_EVENTLOG_TYPE=local:./eventlog mono ./events.exe


      The resulting structure of the eventlog directory looks like this:



      $ tree ./eventlog
      ./eventlog
      └── Application
      ├── 1.log
      ├── 2.log
      ├── 3.log
      ├── 4.log
      ├── 5.log
      ├── 6.log
      ├── Application
      ├── source1
      ├── source2
      └── source3

      5 directories, 6 files


      Note that the directories source1, source2, and source3 were created, but the six log files were placed in the top level Application directory instead of the source directories. If we look at the source field of each log file, we can see that the source is correct:



      $ grep -a Source ./eventlog/Application/*.log
      eventlog/Application/1.log:Source: source1
      eventlog/Application/2.log:Source: source1
      eventlog/Application/3.log:Source: source2
      eventlog/Application/4.log:Source: source2
      eventlog/Application/5.log:Source: source3
      eventlog/Application/6.log:Source: source3


      My expectation is that the above directory structure should look like this instead, considering that each event log source had two events written (and I don't see the point of the second Application directory):



      ./eventlog
      └── Application
      ├── source1
      │   ├── 1.log
      │   └── 2.log
      ├── source2
      │   ├── 1.log
      │   └── 2.log
      └── source3
      ├── 1.log
      └── 2.log


      Now, I know that the obvious solution might be to use a logging solution other than Mono's built-in event logging. However, at this point, it is important that I stick with the built-in tools available.



      Is there a way to configure Mono's built-in local event logging to save the events to log files in the relevant source directory, or is this possibly a bug in Mono?










      share|improve this question
















      I am working on getting C# applications written for Windows to run on Linux using Mono. I am using Mono 5.18.0.240 from the Mono repository, on Ubuntu 18.04.1.



      My understanding is that Mono includes a local file-based event logger. By setting the environment variable MONO_EVENTLOG_TYPE to local (followed by an optional path), events are logged to a file-based log. However, logged events seem to not be sorted into the correct source directory that gets created. This makes it so that all events are logged to the same directory, which makes it more difficult to navigate through the files should many events be logged.



      Consider this C# program that just logs two events each for three event sources:



      using System;
      using System.Diagnostics;

      namespace EventLogTest
      {
      class Program
      {
      public static void Main()
      {
      var sources = new string { "source1", "source2", "source3" };

      foreach(var source in sources){
      if(! EventLog.SourceExists(source)) EventLog.CreateEventSource(source, "Application");

      EventLog log = new EventLog();
      log.Source = source;

      log.WriteEntry("some event");
      log.WriteEntry("another event");
      }
      }
      }
      }


      We can build the program into an executable and then run it:



      $ csc events.cs
      Microsoft (R) Visual C# Compiler version 2.8.2.62916 (2ad4aabc)
      Copyright (C) Microsoft Corporation. All rights reserved.
      $ MONO_EVENTLOG_TYPE=local:./eventlog mono ./events.exe


      The resulting structure of the eventlog directory looks like this:



      $ tree ./eventlog
      ./eventlog
      └── Application
      ├── 1.log
      ├── 2.log
      ├── 3.log
      ├── 4.log
      ├── 5.log
      ├── 6.log
      ├── Application
      ├── source1
      ├── source2
      └── source3

      5 directories, 6 files


      Note that the directories source1, source2, and source3 were created, but the six log files were placed in the top level Application directory instead of the source directories. If we look at the source field of each log file, we can see that the source is correct:



      $ grep -a Source ./eventlog/Application/*.log
      eventlog/Application/1.log:Source: source1
      eventlog/Application/2.log:Source: source1
      eventlog/Application/3.log:Source: source2
      eventlog/Application/4.log:Source: source2
      eventlog/Application/5.log:Source: source3
      eventlog/Application/6.log:Source: source3


      My expectation is that the above directory structure should look like this instead, considering that each event log source had two events written (and I don't see the point of the second Application directory):



      ./eventlog
      └── Application
      ├── source1
      │   ├── 1.log
      │   └── 2.log
      ├── source2
      │   ├── 1.log
      │   └── 2.log
      └── source3
      ├── 1.log
      └── 2.log


      Now, I know that the obvious solution might be to use a logging solution other than Mono's built-in event logging. However, at this point, it is important that I stick with the built-in tools available.



      Is there a way to configure Mono's built-in local event logging to save the events to log files in the relevant source directory, or is this possibly a bug in Mono?







      linux logging mono






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Jan 29 at 18:20







      millinon

















      asked Jan 28 at 20:07









      millinonmillinon

      1,03311325




      1,03311325




      migrated from superuser.com Jan 28 at 21:20


      This question came from our site for computer enthusiasts and power users.









      migrated from superuser.com Jan 28 at 21:20


      This question came from our site for computer enthusiasts and power users.


























          0






          active

          oldest

          votes











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54410449%2fmono-on-linux-event-logging%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes
















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54410449%2fmono-on-linux-event-logging%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Plaza Victoria

          Puebla de Zaragoza

          Musa