如何解决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 举报,一经查实,本站将立刻删除。