2016-03-23 16 views
0

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

+1

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 –

+0

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 –

cevap

0

üzerine gelindiğinde ne olacağını görmek için bir OnConsoleStatusListener eklemek hemen sorunun ne söyleyemem, ama yararlı olacaktır: RollingFileAppender den

LoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory(); 
lc.reset(); 
OnConsoleStatusListener.addNewInstanceToContext(lc); 

Devrilen problemleri genellikle kaynaklanır yapılandırmalarında mutlak ve göreceli yolların bir karışımı (Issue #117, Issue #110) veya WRITE_EXTERNAL_STORAGE izninin eksik olması (sizin için geçerli değildir). OnConsoleStatusListener hata ayıklama çıkışı biraz ışık verebilir. Değilse, sorunu yeniden üreten bir Android Studio projesiyle bir GitHub Issue oluşturursanız hata ayıklamaya çalışabilirim.

İlgili konular