使依赖项写入主日志文件

时间:2014-08-07 08:09:59

标签: java android log4j

我正在开发一个使用android-log4j写入日志文件的Android应用。 Android应用程序有一个依赖项,也需要写入此日志。这种依赖关系(也由我们的团队编写)是一个maven项目,需要这些日志依赖:

    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.5</version>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.6</version>
        <scope>test</scope>
    </dependency>

有没有办法让依赖jar将其日志写入Android应用程序的主日志?

谢谢!

1 个答案:

答案 0 :(得分:0)

我找不到修复此配置的方法。

由于android-log4j和slf4j是两个不同的日志记录组件,我们所做的是创建一个注入依赖项的日志包装器。我知道这只有在拥有依赖项时才有效,但这是一个值得检查的解决方法。日志包装器calss:

public interface LogWrapper {

    public void debug(String message);
    public void debug(String message, Throwable t);

    public void info(String message);
    public void info(String message, Throwable t);

    public void warn(String message);
    public void warn(String message, Throwable t);

    public void error(String message);
    public void error(String message, Throwable t);

    public LogWrapper createNewLogger(Class<?> tag);

}

由于我们想要依赖项中每个类的新记录器,我们使用了工厂类:

public class LoggerFactory {

    private LogWrapper logger;

    public LoggerFactory(LogWrapper logger){
        this.logger = logger;
    }

    public LogWrapper getLogger(Class<?> tag){
        if(logger!=null)
            return logger.createNewLogger(tag);
    }
}

android端实现了这个LogWrapper并通过它的构造函数向它发送依赖(称为LogReceiver):

public class LogReceiver {
    protected LogWrapper log;

    public LogReceiver(LoggerFactory logFactory) {
        log = logFactory.getLogger(getClass());
        log.info("A log call");
    }

}

在android方面,我们可以实现日志以使用android-log4j,LogCat或我们想要的任何其他日志工具。 这可能是一种矫枉过正,但它确实做到了我们想要的。希望它可以帮助任何人。