Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 389309
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 12, 20262026-05-12T15:51:16+00:00 2026-05-12T15:51:16+00:00

I have a logger class that handles various information display with pretty colors (yay.).

  • 0

I have a logger class that handles various information display with pretty colors (yay.). However, since it writes to the console in separated steps (i.e. set color to red, write text, set color to gray, write text, for something that would render “[Error] Description…” with the error being in red), but I have a multithreaded application, so the steps can get mixed up and print random stuff in random colors.

I am aware of the lock keyword, however it will not work with a static class such as the console.

Here is some example code if I was unclear:

using System;
using System.Text;

    namespace N.Utilities.IO
    {
        public static class Logger
        {
            private static void WriteColored(string value, ConsoleColor color)
            {
                if (Logger.UseColor)
                {
                    Console.ForegroundColor = color;
                    Console.Write(value);
                    Console.ForegroundColor = ConsoleColor.Gray;
                }
                else
                {
                    Console.Write(value);
                }
            }   

            private static void WriteLineColored(string value, ConsoleColor color)
            {
                if (Logger.UseColor)
                {
                    Console.ForegroundColor = color;
                    Console.WriteLine(value);
                    Console.ForegroundColor = ConsoleColor.Gray;
                }
                else
                {
                    Console.Write(value);
                }
            }

            private static bool useColor = true;

            public static bool UseColor
            {
                get
                {
                    return Logger.useColor;
                }
                set
                {
                    Logger.useColor = value;
                }
            }

            public static void Inform(string value)
            {
                Logger.WriteColored("    [Info] ", ConsoleColor.White);
                Console.WriteLine(value);
            }

            public static void Warn(string value)
            {
                Logger.WriteColored(" [Warning] ", ConsoleColor.Yellow);
                Console.WriteLine(value);
            }

            public static void Error(string value)
            {
                Logger.WriteColored("   [Error] ", ConsoleColor.Red);
                Console.WriteLine(value);
            }
    }
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-12T15:51:16+00:00Added an answer on May 12, 2026 at 3:51 pm

    Your class needs:

    private static readonly object ConsoleWriterLock = new object();
    

    Then you can lock on this before writing to the console.

    lock(ConsoleWriterLock)
    {
         //Your code here
    }
    

    The lock keyword will work with a static class, you just need to provide a static readonly object to lock on.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have a logger class that is used all across my application, both in
We have a C# logging class that uses System.Diagnostics.StackTrace and StackFrame to obtain information
Let´s say I have a logger class that has an attribute pointing to an
I have a concrete class of logger that Microsoft.Unity will resolve ILogger to. The
I have created a ThreadManager class that handles Threads and its task is to
I have a base class named 'baseScreen' as follows: digient.casino.ui.baseScreen = function() { goog.debug.Logger.getLogger('demo').info('baseScreen');
I have the following class which handles my user logged in / logged out
I have a logger in a c++ application that uses defines as follows: #define
I've a problem with celery's logger. I have a function that renders frames. I
Okay, so say I have a class that looks like this : public class

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.