(и отдельно в автономных приложениях Java/настольных компьютерах)
Класс выглядит следующим образом:
Код: Выделить всё
package com.example.shared;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class ExampleClass {
public static Logger logger = LogManager.getLogger(ExampleClass.class);
public ExampleClass(){}
public void printMessages(){
logger.error("This is an error message from ExampleClass!");
logger.warn("This is a warn message from ExampleClass!");
logger.info("This is an info message from ExampleClass!");
logger.debug("This is a debug message from ExampleClass!");
logger.trace("This is a trace message from ExampleClass!");
}
}
Код: Выделить всё
4.0.0
com.example
shared
1.0.0
Shared
1.8
1.8
UTF-8
UTF-8
1.8
org.apache.logging.log4j
log4j-api
2.20.0
org.apache.logging.log4j
log4j-core
2.20.0
app/build.gradle
Код: Выделить всё
plugins {
id 'com.android.application'
}
android {
compileSdk 34
buildToolsVersion "30.0.3"
defaultConfig {
applicationId "com.example.android"
minSdk 26
targetSdk 34
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
packagingOptions {
resources.excludes.add("META-INF/*")
resources.excludes.add("serviceAccountKey*.json")
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.12.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'com.example:shared:1.0.0'
implementation 'org.apache.logging.log4j:log4j-api:2.20.0'
implementation 'org.apache.logging.log4j:log4j-core:2.20.0'
runtimeOnly 'com.celeral:log4j2-android:1.0.0'
}
Код: Выделить всё
Код: Выделить всё
package com.example.android;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import com.example.shared.ExampleClass;
public class MainActivity extends AppCompatActivity {
public static Logger logger = LogManager.getLogger(MainActivity.class);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Test logging from dependency
ExampleClass ec = new ExampleClass();
ec.printMessages();
}
}
Код: Выделить всё
E/ExampleClass: This is an error message from ExampleClass!
W/ExampleClass: This is a warn message from ExampleClass!
I/ExampleClass: This is an info message from ExampleClass!
D/ExampleClass: This is a debug message from ExampleClass!
V/ExampleClass: This is a trace message from ExampleClass!
р>
Код: Выделить всё
W/System.err: ERROR StatusLogger Unable to load services for service class org.apache.logging.log4j.spi.Provider
W/System.err: java.lang.NoSuchMethodError: No static method metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite; in class Ljava/lang/invoke/LambdaMetafactory; or its super classes (declaration of 'java.lang.invoke.LambdaMetafactory' appears in /apex/com.android.art/javalib/core-oj.jar)
W/System.err: at org.apache.logging.log4j.util.ServiceLoaderUtil.callServiceLoader(ServiceLoaderUtil.java:110)
W/System.err: at org.apache.logging.log4j.util.ServiceLoaderUtil$ServiceLoaderSpliterator.(ServiceLoaderUtil.java:146)
W/System.err: at org.apache.logging.log4j.util.ServiceLoaderUtil.loadClassloaderServices(ServiceLoaderUtil.java:101)
W/System.err: at org.apache.logging.log4j.util.ServiceLoaderUtil.loadServices(ServiceLoaderUtil.java:83)
W/System.err: at org.apache.logging.log4j.util.ServiceLoaderUtil.loadServices(ServiceLoaderUtil.java:77)
W/System.err: at org.apache.logging.log4j.util.ProviderUtil.(ProviderUtil.java:67)
W/System.err: at org.apache.logging.log4j.util.ProviderUtil.lazyInit(ProviderUtil.java:145)
W/System.err: at org.apache.logging.log4j.util.ProviderUtil.hasProviders(ProviderUtil.java:129)
W/System.err: at org.apache.logging.log4j.LogManager.(LogManager.java:90)
W/System.err: at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:598)
W/System.err: at com.example.android.MainActivity.(MainActivity.java:14)
W/System.err: at java.lang.Class.newInstance(Native Method)
W/System.err: at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95)
W/System.err: at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:44)
W/System.err: at android.app.Instrumentation.newActivity(Instrumentation.java:1253)
W/System.err: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3353)
W/System.err: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
W/System.err: at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
W/System.err: at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
W/System.err: at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
W/System.err: at android.os.Handler.dispatchMessage(Handler.java:106)
W/System.err: at android.os.Looper.loop(Looper.java:223)
W/System.err: at android.app.ActivityThread.main(ActivityThread.java:7656)
W/System.err: at java.lang.reflect.Method.invoke(Native Method)
W/System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Код: Выделить всё
W/System.err: ERROR ExampleClass This is an error message from ExampleClass!
Обновление 1: кто-то проголосовал за закрытие этого вопроса, так как «Требуется больше внимания». Есть только одна проблема, требующая ответа - я исправил последнее утверждение, чтобы отразить это.
Окончательное редактирование:
После обновления до log4j v2. .24.1 (и удаление зависимости времени выполнения celeral log4j2-android) теперь яснее, что происходит.
Log4j не удалось найти/разрешить конфигурацию, представленную в каталоге ресурсов, и поэтому никакие регистраторы не определены. По умолчанию для регистраторов, которые я пытаюсь использовать, установлено значение Level.ERROR, поэтому появляется одна строка с ошибкой:
Код: Выделить всё
W/System.err: ERROR ExampleClass This is an error message from ExampleClass!
Проблема, которую я пытаюсь решить. нужно решить, почему конфигурация не загружается
Подробнее здесь: https://stackoverflow.com/questions/789 ... ot-working
Мобильная версия