Android için logback kullanıyorum ve kodda yapılandırıyorum çünkü log dizininin telefona bağlı olarak dinamik olarak değişmesini istiyorum (örneğin bazı telefonlarda harici depolama var ve Bu, ancak diğer telefonlar bu yüzden dahili depolamaya yönlendirmek zorunda değiliz). İşte Android logback BoyutBasedTriggeringPolicy tetiklemiyor
benim yapılandırma kodu:File logFilesDir = getLogFilesDir(this);
LoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory();
lc.reset();
RollingFileAppender<ILoggingEvent> fileAppender = null;
lc.putProperty("LOG_DIR", logFilesDir.getAbsolutePath());
PatternLayoutEncoder encoder = new PatternLayoutEncoder();
encoder.setContext(lc);
encoder.setPattern("%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n");
encoder.start();
File logFile = new File(logFilesDir, "MyApplication.log");
FixedWindowRollingPolicy rollingPolicy = new FixedWindowRollingPolicy();
rollingPolicy.setContext(lc);
rollingPolicy.setFileNamePattern("${LOG_DIR}/MyApplication.%i.log");
rollingPolicy.setMinIndex(1);
rollingPolicy.setMaxIndex(5);
SizeBasedTriggeringPolicy<ILoggingEvent> triggeringPolicy = new SizeBasedTriggeringPolicy<>();
triggeringPolicy.setContext(lc);
triggeringPolicy.setMaxFileSize("1KB"); // for testing; would otherwise be 5MB
fileAppender = new RollingFileAppender<>();
fileAppender.setContext(lc);
fileAppender.setFile(logFile.getAbsolutePath());
fileAppender.setEncoder(encoder);
fileAppender.setRollingPolicy(rollingPolicy);
fileAppender.setTriggeringPolicy(triggeringPolicy);
rollingPolicy.setParent(fileAppender);
fileAppender.start();
rollingPolicy.start();
triggeringPolicy.start();
// add the newly created appenders to the root logger;
// qualify Logger to disambiguate from org.slf4j.Logger
ch.qos.logback.classic.Logger root = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
root.addAppender(fileAppender);
root.info("----- Application onCreate -----");
StatusPrinter.print(lc);
günlük doğru klasöre yazar ve hepsi o başarısız benim günlük dosyası (benim test case 1KB'nin olarak) maksimum dosya boyutunu aşıyor dışında, Tamam çalışma var yuvarlanmak. Bunun yerine, dosya sadece büyümeye devam ediyor.
StatusPrinter.print
herşey yolunda gibi görünüyor şu çıktıyı yazıyor
|-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [assets/logback.xml]
|-INFO in ch.qos.logback.core.rolling.RollingFileAppender[null] - Active log file name: /storage/emulated/0/MyApplication/logs/MyApplication.log
|-INFO in ch.qos.logback.core.rolling.RollingFileAppender[null] - File property is set to [/storage/emulated/0/MyApplication/logs/MyApplication.log]
|-INFO in [email protected] - No compression will be used
ben bulabilirsiniz olduğu kadar çok diğer benzer konularda baktık ve genellikle insanlar RollingFileAppender kaçırmak gibi görünüyor ya da yapma WRITE_EXTERNAL_STORAGE izni var ... Bu davalardan birine vurmak gibi görünmüyor. Benim kodumla ilgili (normalde kullandıkları XML vs) bir şey farklı mıdır?
Bunu düzeltmek veya daha ayrıntılı bir şekilde gidermek için yapabileceğim bir şey var mı?
Teşekkür
her zaman kontrol etmelisiniz 6.0' 'android gelen, dikkatli olun' ContextCompat.checkSelfPermission (getContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) ! = PackageManager.PERMISSION_GRANTED) 'sdcard dosyayı yazmadan önce. Eğer sdcard'a yazamıyorsanız, hata belki de "Çalışma Zamanında İzin İsteme" den gelir: http://developer.android.com/intl/vi/training/permissions/requesting.html –
Ahhh. Ben android 6 harici depolama için yazma bazı sorun var ve ben bunu sıralamadım. Ben ele alacağım. Her neyse, sorun kesinlikle android 5 oluyor –