Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 将同一代码中的信息记录到不同的目标_.net_Logging_Log4net - Fatal编程技术网

.net 将同一代码中的信息记录到不同的目标

.net 将同一代码中的信息记录到不同的目标,.net,logging,log4net,.net,Logging,Log4net,我有一些记录信息的类,它在两个不同的位置使用 class SomeClass: ISomeClass { private ILogger _logger = Log.GetLogger(); public void Action() { _logger.Log("Action started"); //.... } } class OneUsage { ILogger _logger = Logger.GetLogger();

我有一些记录信息的类,它在两个不同的位置使用

class SomeClass: ISomeClass {
    private ILogger _logger = Log.GetLogger();
    public void Action() {
        _logger.Log("Action started");
        //....
    }
}

class OneUsage {
    ILogger _logger = Logger.GetLogger();
    public OneUsage(ISomeClass someClass) {
        this.someClass = someClass;
    }
    public OtherAction() {
        _logger.Log("Other action started");
        someClass.Action();
    }
}

class SecondUsage {
    ILogger _logger = Logger.GetLogger();
    public SecondUsage(ISomeClass someClass) {
        this.someClass = someClass;
    }
    public OtherAction() {
        _logger.Log("Second Other action started");
        someClass.Action();
    }
}
我需要将日志从一个用途写到一个地方,从第二个用途写到另一个地方。 我打电话的时候

oneUsage.OtherAction(); // I want logs to be written to DB
secondUsage.OtherAction // I want logging to some file
当我打电话的时候

oneUsage.OtherAction(); // I want logs to be written to DB
secondUsage.OtherAction // I want logging to some file
所有这些调用可能同时发生在同一个正在运行的应用程序上

我可以通过某种方式配置Log4net来实现这一点吗?
或者是否有其他方法来处理此问题?

log4net的方法是,配置多个记录器并按名称解决它们。每个记录器包含一个或多个appender(ConsoleAppender、RollingFileAppender等)。通过解析组件中的正确记录器,可以定义输出通道

配置(请参阅)


如果这有帮助,请告诉我。

log4net的方法是,配置多个记录器并按名称解析它们。每个记录器包含一个或多个appender(ConsoleAppender、RollingFileAppender等)。通过解析组件中的正确记录器,可以定义输出通道

配置(请参阅)


如果这有帮助,请告诉我。

不要在SomeClass中创建记录器,而是将记录器作为参数从调用类传递给SomeClass


如果您的someclass实例始终相同,则将记录器传递给每个方法;如果您有不同的实例,则将记录器传递给构造函数。

不要在someclass中创建记录器,而是将调用类中的记录器作为参数传递给someclass


如果您的someclass实例总是相同的,则将记录器传递给每个方法,如果您有不同的实例,则将记录器传递给构造函数。

Hm,但我需要能够从外部类解析appender,比如从OneUsage的调用站点解析appender//设置正确的日志记录器oneUsage.OtherAction();//所有的日志都会被放在上面的设置行中,你能不能用更多的细节和可能的代码示例来解释这个问题?嗯,但我需要从外部类解析appender的能力,比如从OneUsage的调用站点解析//设置正确的日志记录器oneUsage.OtherAction();//所有的日志都会转到上面的设置行,您能用更多的细节和可能的代码示例来解释这一点吗?但我不想用日志细节污染我的API。我想问的是,对于这类问题,可能有一些常见的解决方案。在appender配置中,您可以使用过滤器,但您希望过滤什么?你需要知道呼叫类,我认为这是不可能的。。。如果在这个“特殊”类中,您必须使用“父”日志记录配置,请将“父”日志记录程序传递到该类中,而不是在该类中拥有一个日志记录程序。但我不想用日志记录细节污染我的API。我想问的是,对于这类问题,可能有一些常见的解决方案。在appender配置中,您可以使用过滤器,但您希望过滤什么?你需要知道呼叫类,我认为这是不可能的。。。如果在这个“特殊”类中,您必须使用“父”日志记录配置,那么将“父”日志记录程序传递到类中,而不是在类本身中使用日志记录程序。