2011-03-27 36 views
25

我們在我們的項目中使用LogBack,我想根據某些數據庫值配置記錄器,即如果某些DB值設置爲true,則記錄器應該同時使用文件和數據庫appender,如果它是false,則記錄器必須僅使用DB的appender,SLF4J - Logback:如何在運行時配置記錄器?

我也想用靜態的最終記錄器來保存,所以我不會創建一個新的實例每次記錄器被調用時,

所以我怎麼會做這樣的事情?

問候,

回答

18

您應該按this example中所述以編程方式配置Logback。

public class Main { 

    public static void main(String[] args) { 
    Logger logger = (Logger) LoggerFactory.getLogger("abc.xyz"); 

    LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); 
    FileAppender<LoggingEvent> fileAppender = 
         (FileAppender<LoggingEvent>) logger.getAppender("file"); 
    if(fileAppender != null) { 
     fileAppender.stop(); 
     fileAppender.setFile("new.log"); 
     PatternLayout pl = new PatternLayout(); 
     pl.setPattern("%d %5p %t [%c:%L] %m%n)"); 
     pl.setContext(lc); 
     pl.start(); 
     fileAppender.setLayout(pl); 
     fileAppender.setContext(lc); 
     fileAppender.start(); 
    } 
    ... etc  
    } 
} 
+0

這是最便捷的方式,我發現到現在,它的工作對我來說,非常感謝 – 2011-04-21 08:01:38

+0

這是我們使用的logback 1.0.6的事,但在1.1.7它不工作了:停止的appender不能被重用。請參閱http://logback.qos.ch/apidocs/ch/qos/logback/core/OutputStreamAppender.html#stop() – 2016-10-28 08:34:01

+1

如果可以,請添加所有導入.. – 2016-12-26 06:45:04

1

是否有背後從數據庫中讀取配置屬性具體原因是什麼?一個建議是使用JNDI。 Logback可以使用標籤讀取JNDI配置的值。

相關問題