2015-06-19 20 views
9

Tôi muốn có một tệp logback.xml để sản xuất và một tệp khác với các tham số khác nhau trên môi trường dàn dựng của tôi. Mã của tôi có thể tự động biết trong thời gian chạy nếu nó được sản xuất hoặc thời gian chạy. Có cách nào để thiết lập tệp cấu hình logback khi chạy không?Làm cách nào để đặt tệp cấu hình đăng nhập khi chạy?

+0

Bạn có sử dụng Spring không? – John

+0

không! Plain java cũ. – poiuytrez

Trả lời

9

Phương pháp 1: Nạp từ các tập tin khác nhau

Bạn có thể giữ hai tập tin cấu hình khác nhau và tải các tập tin cho các môi trường cụ thể với JoranConfiguratior#doConfigure lúc khởi động ứng dụng.

Xem http://logback.qos.ch/manual/configuration.html#joranDirectly. Ví dụ mã cũng lấy từ đó với những thay đổi đối với trường hợp của bạn:

public class MyApp3 { 
    final static String STAGING_CONFIGURATION = "/path/to/statging.xml"; 
    final static String PRODUCTION_CONFIGURATION = "/path/to/production.xml"; 

    final static Logger logger = LoggerFactory.getLogger(MyApp3.class); 

    public static void main(String[] args) { 
    // assume SLF4J is bound to logback in the current environment 
    LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); 

    // determine environmental specific configuration path 
    final String path = isProdcution() ? PRODUCTION_CONFIGURATION : STAGING_CONFIGURATION; 

    try { 
     JoranConfigurator configurator = new JoranConfigurator(); 
     configurator.setContext(context); 
     // Call context.reset() to clear any previous configuration, e.g. default 
     // configuration. For multi-step configuration, omit calling context.reset(). 
     context.reset(); 
     configurator.doConfigure(path); 
    } catch (JoranException je) { 
     // StatusPrinter will handle this 
    } 
    StatusPrinter.printInCaseOfErrorsOrWarnings(context); 

    logger.info("Entering application."); 

    Foo foo = new Foo(); 
    foo.doIt(); 
    logger.info("Exiting application."); 
    } 
} 

Tất nhiên, mã của bạn để nhận được tên tập tin chính xác có thể được điều chỉnh phù hợp nhu cầu của bạn. Hơn nữa, có một số phương thức quá tải doConfigure (http://logback.qos.ch/apidocs/ch/qos/logback/core/joran/GenericConfigurator.html#doConfigure%28java.io.File%29) sẽ lấy InputStreams, Tệp và URL tốt hơn.

Phương pháp 2: Sử dụng điều kiện trong một tập tin

Nếu bạn có thể xác định môi trường bằng cách sử dụng xây dựng logbag trong hoặc chủ tài sản của hệ thống, bạn có thể sử dụng các cấu hình có điều kiện:

http://logback.qos.ch/manual/configuration.html#conditional

<!-- if-then form --> 
<if condition="condition for your production"> 
    <then> 
     ... 
    </then> 
    <else> 
     ... 
    </else> 
</if> 
+0

Cảm ơn phương pháp thứ 2 của bạn, tôi không biết chúng tôi có thể thêm loại điều kiện đó. Có một lỗi đánh máy nhỏ trong "" đầu tiên của bạn bằng cách này ... :) – ArnaudR

+0

cố định, cảm ơn bạn :-) – flo

Các vấn đề liên quan