This problem has been bugging us for a long time, but there's finally a resolution, as a matter of fact, more than one.

ServiceStack has convenient logging interface for which you first new ILogFactory interface:

LogManager.LogFactory = new Log4NetFactory(configureLog4Net: true);  

and then in any place in the application get logger and log stuff:

ILog log = LogManager.GetLogger("foo);  
log.Error("foo");  

That works great but the wrinkle is that very same method is used by internal Service Stack infrastructure and related products like Redis, and OrmLight and the Log4Net log file becomes something like that:

{DEBUG}06/20 13:44:42 PaymentService - Payment Service started and configured...
{DEBUG}06/20 14:40:58 ServiceStack.Redis.RedisResolver - New Redis Masters: FileServ01:6379
{DEBUG}06/20 14:40:58 ServiceStack.Redis.RedisResolver - New Redis Slaves: FileServ01:6379
{DEBUG}06/20 14:40:59 ServiceStack.Redis.RedisNativeClient - S: INFO

The problem is not only in large number of unwanted messages, but the change of application source. In the example above the configured application source is "PaymentService", but the messages after that came from the "ServiceStack.Redis.RedisResolver" application source.

Since we have centralized logging and all messages end up in one location, we had no idea of where all those ServiceStack messages came from and the volume of the messages was staggering.

After poking around the code and StackOverflow, I heard back from (I think) Service Stack creator Demis Bellot on two possible solutions.

Filter out internal messages

I turns out that Log4Net has Filter element that can be in any appender. Here's how filter can be applied in this situation:

<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">  
        <filter type="log4net.Filter.LoggerMatchFilter">
            <loggerToMatch value="ServiceStack" />
            <acceptOnMatch value="false" />
        </filter>
        <file name="logFile" value="C:\Logs\PaymentService.log" />
      ....
</appender>  

Suppress messages in AppHost.OnLogError

Service Stack > v4.0.61 has new OnLogError overload

public override void OnLogError(Type type, string message, Exception innerEx=null)  
{
    if (!type == typeof(ServiceStack.Redis.RedisNativeClient)) // just an example
        base.OnLogError(type, message, innerEx);
}

Now since all internal logging calls go through this overload, we can have control over what log or not to log. I was told that ServiceStack.Redis, Service.Stack.OrmLit, ServiceStack.Dto.* and ServiceStack.Messaging should work as well.