Skip to content

roman-mityukov/log4j2-android

Repository files navigation

log4j2-android

Простая библиотека для использования log4j2 на Android. Позволяет выводить лог в Logcat и в файл.

Для инициализации добавьте в Application::onCreate

Log4j2Android.init(this.applicationContext, R.raw.log4j2_config) 

Конфиг логгера описывается с помощью подобного res/raw/log4j2_config.xml. Подробнее о конфигурации здесь

<?xml version="1.0" encoding="UTF-8"?> <Configuration status="debug"> <Appenders> <Logcat name="Logcat"> <ThresholdFilter level="ALL" onMatch="ACCEPT" onMismatch="DENY" /> <PatternLayout pattern="%m" /> </Logcat> <RollingFile name="RollingFile" fileName="${logsdirpathlookup:internaldir}/com.exapmple.app.log" filePattern="${logsdirpathlookup:internaldir}/com.example.app-%i.log.zip"> <ThresholdFilter level="ALL" onMatch="ACCEPT" onMismatch="DENY" /> <PatternLayout> <Pattern>%d %p %c{1.} [%t] %m%n</Pattern> </PatternLayout> <Policies> <SizeBasedTriggeringPolicy size="1 MB" /> </Policies> <DefaultRolloverStrategy max="5" /> </RollingFile> </Appenders> <Loggers> <Root level="ERROR"> <AppenderRef ref="Logcat" /> <AppenderRef ref="RollingFile" /> </Root> </Loggers> </Configuration> 

С помощью ${logsdirpathlookup:externaldir} можно указать путь applicationContext.getExternalFilesDir() или с помощью ${logsdirpathlookup:internaldir} путь applicationContext.filesDir

Для работы библиотеки используется форк log4j2:2.3, в котором, для корректной работы на Android, удалена зависимость от java.lang.management.ManagementFactory в org.apache.logging.log4j.core.lookup.JmxRuntimeInputArgumentsLookup. На Android нельзя использовать jmx, поэтому это изменение никак не повлияет на работу логгера. По какой-то причине log4j2.disable.jmx=true перестало работать для Android с API>=26

Добавьте репозиторий с форком и библиотекой в build.gradle.kts

maven { setUrl("https://dl.bintray.com/roman-mityukov/android") } 

Можно использовать библиотеку через фасад slf4j (что позволит легко заменить логгер при необходимости, например на logback). Для этого нужно добавить следующие зависимости

implementation("org.slf4j:slf4j-api:1.7.25") //simple logging facade for java implementation("org.apache.logging.log4j:log4j-slf4j-impl:2.3") //bridge from log4j2 to slf4j implementation("io.rm.log4j2.android:log4j2-android:1.0.0") //this library annotationProcessor("org.apache.logging.log4j:log4j-core:2.3") 

И в коде создать логгер с помощью slf4j api

import org.slf4j.Logger import org.slf4j.LoggerFactory val logger: Logger = LoggerFactory.getLogger("MyLoggerName") 

Или можно использовать api log4j2 напрямую

dependencies { implementation("org.apache.logging.log4j:log4j-api:2.3") implementation("io.rm.log4j2.android:log4j2-android:1.0.0") } 

Создать логгер

import org.apache.logging.log4j.LogManager import org.apache.logging.log4j.Logger val logger: Logger = LogManager.getLogger("MyLoggerName") 

Credits:

About

A simple library that allows to use Log4j2:2.3 on android.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published