在测试类中如何加载logback的配置文件logback.xml

卡卡是个胖子 2012-02-17 10:20:26
关于logback,我知道logback.xml放在src根目录下可以默认直接加载

如果我在项目中scr新建一个包com.test.resources,然后把logback.xml放在这个包下面。
那么,LogbackDemo.java测试类如何加载这个配置文件?
...全文
9465 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
码界一棵葱 2014-05-29
  • 打赏
  • 举报
回复
引用 1 楼 sdsky1987 的回复:
好吧,Java Project里加载懂了

// LoggerFactory.getLogger()方法的参数使用的是当前类的class
    private static final Logger logger = LoggerFactory.getLogger(LogDemo.class);
    public static void main(String[] args) {
        LoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory();
        JoranConfigurator configurator = new JoranConfigurator();
        configurator.setContext(lc);
        lc.reset();
        try {
            configurator.doConfigure("src/com/bag/resources/logback-log.xml");
       } catch (JoranException e) {
            e.printStackTrace();
        }
        StatusPrinter.printInCaseOfErrorsOrWarnings(lc);
        System.out.println("===================");
        logger.debug("Hello {}","debug message");
    }
}

但是,web项目里如何加载配置文件呢? web.xml里加载logback.xml路径的语句如何写呢?求指导~~~~
大哥, private static final Logger logger = LoggerFactory.getLogger(LogDemo.class);执行这句的时候,LoggerContext就已经初始化完成了,配置也完成了,你后边再赋值还行么,我试了不管用啊。。求大哥指教!感激不尽。。。或者您知道其他指定logback.xml路径的方法么?
野木香 2013-10-10
  • 打赏
  • 举报
回复
这个问题,也许看logback源代码能解决
卡卡是个胖子 2012-02-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ldh911 的回复:]

那么要自己写代码去初始化Logger(借助Application启动事件,或Servlet启动之类的方式),或者借助Spring来替你完成。

不过其实没必要,类似于log.xml这样的配置,是值得让它生存在根目录的。
[/Quote]

嗯,谢前辈指点。
MiceRice 2012-02-17
  • 打赏
  • 举报
回复
那么要自己写代码去初始化Logger(借助Application启动事件,或Servlet启动之类的方式),或者借助Spring来替你完成。

不过其实没必要,类似于log.xml这样的配置,是值得让它生存在根目录的。
卡卡是个胖子 2012-02-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ldh911 的回复:]

配置文件放在另一个比如 etc 或 properties 目录,但在Eclipse中将其设置为source目录即可。

如果是发布,可以单独打成一个jar包,也可以直接合并到class的jar中打包;或者为了便于修改,放到系统CLASSPATH指定的某个位置上。
[/Quote]

前辈说的应该都是默认路径,不需要指定,系统就会自动查找的。对吧?

我的情况是,有个web项目
src根目录下有日志配置文件logback.xml
项目其他地方只要声明
private final static Logger logger = LoggerFactory.getLogger(VerificationImpl.class);
就可以用logger调用打印日志的方法了。

现在我想,正规的项目一般没有把文件直接放在根目录的。所以,我就将logback.xml放在com.test.resource包中。这样一来,系统就无法自动获取这个配置文件了。
我的问题就在这里,怎样才能在某个位置指定logback.xml的路径,让系统去该路径下找。

自己手动写一个监听器的方法我也知道。
我是在想有没有办法在web.xml里声明logback.xml的路径;或者注入spring里,在spring的配置文件里声明。
MiceRice 2012-02-17
  • 打赏
  • 举报
回复
配置文件放在另一个比如 etc 或 properties 目录,但在Eclipse中将其设置为source目录即可。

如果是发布,可以单独打成一个jar包,也可以直接合并到class的jar中打包;或者为了便于修改,放到系统CLASSPATH指定的某个位置上。
卡卡是个胖子 2012-02-17
  • 打赏
  • 举报
回复
最简单的,logback.xml放在src根目录下

1.logback首先会试着查找logback.groovy文件;
2.当没有找到时,继续试着查找logback-test.xml文件;
3.当没有找到时,继续试着查找logback.xml文件;
4.如果仍然没有找到,则使用默认配置(打印到控制台)

这样就不用考虑加载配置文件的问题。

但是我想,项目里把配置文件放在src根目录下,不合适吧。如何能指定加载路径呢?
卡卡是个胖子 2012-02-17
  • 打赏
  • 举报
回复
好吧,Java Project里加载懂了

// LoggerFactory.getLogger()方法的参数使用的是当前类的class
private static final Logger logger = LoggerFactory.getLogger(LogDemo.class);
public static void main(String[] args) {
LoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory();
JoranConfigurator configurator = new JoranConfigurator();
configurator.setContext(lc);
lc.reset();
try {
configurator.doConfigure("src/com/bag/resources/logback-log.xml");
} catch (JoranException e) {
e.printStackTrace();
}
StatusPrinter.printInCaseOfErrorsOrWarnings(lc);
System.out.println("===================");
logger.debug("Hello {}","debug message");
}
}



但是,web项目里如何加载配置文件呢?


web.xml里加载logback.xml路径的语句如何写呢?求指导~~~~

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧