Logback写入不同的externalDirectory android

问题描述

我正在使用这个库在我的 android 应用程序中添加日志功能

implementation 'org.slf4j:slf4j-api:1.7.30'
implementation 'com.github.tony19:logback-android:2.0.0'

我已经设置了 LoggingFactory

object LoggingFactory {
    private val logger: Logger = LoggerFactory.getLogger(LoggingFactory::class.java.simpleName)
    val DEFAULT_LOG_LEVEL_ENG: Level = Level.TRACE
    val DEFAULT_LOG_LEVEL_USER: Level = Level.WARN
    
    /**
     * Initialization of logging framework. This should be called only when app starts.
     *
     *
     * Default configuration is loaded and if custom configuration is present,it is applied on top
     * of it.
     */
    fun initLogger() {
        applyCustomConfigurationorLoadDefault(LogLevel.Debug)
    }
    
    private fun applyCustomConfigurationorLoadDefault(logLevel: LogLevel) {
        logger.debug("____LOGGER START____")
        val rootLogger = LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME) as ch.qos.logback.classic.Logger
        val levelToSet: Level? = toSlf4jLevel(logLevel)
        if (levelToSet == null || LogLevel.Default.equals(logLevel)) {
            configureLogbackDirectly()
        } else {
            if (rootLogger.level != levelToSet) {
                logger.info("Setting ROOT log level to $levelToSet")
                rootLogger.level = levelToSet
            }
        }
    }
    
    /**
     * Conversion to logging framework level.
     *
     * @return level or `null` when mapping cannot be done
     */
    fun toSlf4jLevel(logLevel: LogLevel?): Level? {
        return if (logLevel == null) {
            null
        } else when (logLevel) {
            LogLevel.Verbose -> Level.TRACE
            LogLevel.Debug -> Level.DEBUG
            LogLevel.Info -> Level.INFO
            LogLevel.Warning -> Level.WARN
            LogLevel.Error -> Level.ERROR
            LogLevel.Off -> Level.OFF
            else -> null
        }
    }
    
    private fun configureLogbackDirectly() {
        // reset the default context (which may already have been initialized)
        // since we want to reconfigure it
        val lc = LoggerFactory.getILoggerFactory() as LoggerContext
        lc.stop()
        // setup FileAppender
        val encoder = PatternLayoutEncoder()
        encoder.context = lc
        encoder.pattern = "%msg%n"
        encoder.start()
        val logcatAppender = LogcatAppender()
        logcatAppender.encoder = encoder
        logcatAppender.start()
        val root = LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME) as ch.qos.logback.classic.Logger
        root.addAppender(logcatAppender)
        // default log level
        if (isDebugBuild) {
            root.level = DEFAULT_LOG_LEVEL_ENG
        } else {
            root.level = DEFAULT_LOG_LEVEL_USER
        }
        logger.info("Default logger configuration loaded with level " + root.level)
    }
    
    val isDebugBuild: Boolean
        get() = "eng" == Build.TYPE
    
   
}

和 logback.xml 之类的

<configuration debug="true">
    <property name="LOG_DIR" value="/storage/emulated/0/Android/data/com.package.name/files/logs" />

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- active log file -->
        <file>${LOG_DIR}/log.txt</file>
        <encoder>
            <pattern>%logger{35} - %msg%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_DIR}/%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxFileSize>50MB</maxFileSize>
            <maxHistory>5</maxHistory>
            <totalSizeCap>500MB</totalSizeCap>
        </rollingPolicy>
    </appender>

    <root level="TRACE">
        <appender-ref ref="FILE" />
    </root>
</configuration>

我想要做的是我想要不同的日志文件,例如 ..../logs/accounts_logs.txt ..../logs/messages_logs.txt ..../logs/files_logs.txt 在我的代码中,我想选择在每次我想记录一些东西时在哪个文件中写入我的输出

这可能吗?我该怎么办?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)