You should create an interface from which you can make many implementations, e.g. an ILogger interface with Warning, Error methods etc.
Then you would create an implementation per logging type (one for console, one for SignalR etc). You could then inject the ILogger into any type that requires it (or another approach is to use a static field and resolve the logger through a static log manager type).
You might also want to consider a library such as Common.Logging which already provides an interface and several implementations already available, e.g. NLog, log4net etc.
Another consideration is whether you wish to mix business logic and logging code. Other alternatives are an AOP approach (PostSharpPostSharp is one option) or semantic loggingsemantic logging.