解决logback的日志文件路径问题
作者:叶_子_X 时间:2023-06-13 10:48:09
假如使用绝对路径,没有任何问题,就是移植性不太好。
假如使用相对路径,则要注意当前路径“.”是在哪儿?
一般我们都会在配置文件中加入log文件的存储目录,如
本人通过研究测试发现:
1.对于J2SE项目,当前路径为工程所在目录
如我的工程为:D:\test
则使用…/logs生成的日志文件位于:D:\logs
2.对于J2EE项目,当前路径为tomcat\bin所在目录
如我的tomcat路径为:D:\tomcat\bin
则使用…/logs生成的日志文件位于:D:\tomcat\logs
补充:logback加载外部配置文件 重置logback配置文件路径
logback加载外部配置文件 重置logback配置文件路径
logback作为一种成熟的日志框架,已被广泛应用在现代各种java项目中。
以javaweb项目为例,使用logback.xml作为logback的配置文件时,在代码中通常是将该配置文件放在src/main/resource/下,部署时该文件会放在classpath下。
但是,有时出于各种目的,需要将logback的配置文件放在特定的目录下,此时需要自定义logback配置文件的加载路径。
logback自动加载配置文件的优先级如下:
1.classpath下的logback-test.xml
2.classpath下的logback.groovy
3.classpath下的logback.xml
4.META-INF/services/ch.qos.logback.classic.spi.Configurator中的 logback 配置实现类
5.logback自带的默认配置文件BasicConfigurator
当需要将日志配置文件放在其他路径下时,其实就是logback重新加载配置文件的过程。
参考代码如下:
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.joran.JoranConfigurator;
import ch.qos.logback.core.util.StatusPrinter;
import java.io.File;
public class LogTest
{
private org.slf4j.Logger logger;
private ch.qos.logback.classic.LoggerContext loggerContext;
public LogTest()
{
logger = org.slf4j.LoggerFactory.getLogger(this.class);
loggerContext = (LoggerContext) org.slf4j.LoggerFactory.getILoggerFactory();
String logbackConfigPath = System.getProperty("user.dir") + "/your_logback_config/logback.xml";
File file = new File(logbackConfigPath);
if(!file.exists())
{
logger.error("logbackConfigPath file is no exist");
}
else
{
if(!file.isFile())
{
logger.error("logbackConfigPath file is not a file");
}
else
{
if(!file.canRead())
{
logger.error("logbackConfigPath file can not read");
}
else
{
JoranConfigurator joranConfigurator = new JoranConfigurator();
joranConfigurator.setContext(loggerContext);
loggerContext.reset();
try {
joranConfigurator.doConfigure(file);
} catch (Exception e) {
logger.error("logbackConfigPath Load logback config file error. Message: {}",e.getMessage());
}
StatusPrinter.printInCaseOfErrorsOrWarnings(loggerContext);
}
}
}
}
}
System.getProperty(“user.dir”)
是获取你程序当前的运行路径,这里也可以把这段代码封装成一个方法,配置文件的路径可以以参数的形式传入,也可以写死。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。
来源:https://blog.csdn.net/g_y_x_/article/details/84726110
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Android 弹出Dialog时隐藏状态栏和底部导航栏的方法
java发起http请求调用post与get接口的方法实例
JDK1.8新特性之方法引用 ::和Optional详解
C# 使用HttpClient模拟请求的案例
![](https://img.aspxhome.com/file/2023/7/91297_0s.jpg)
java基于包结构的请求路由实现实例分享
Android自定义View软键盘实现搜索
Android 内存泄漏的几种可能总结
![](https://img.aspxhome.com/file/2023/7/100627_0s.png)
VS2019打包WPF安装程序最新教程(图文详解)
![](https://img.aspxhome.com/file/2023/8/81098_0s.jpg)
Android studio 运行main 函数的方法
![](https://img.aspxhome.com/file/2023/5/89535_0s.png)
Java语法糖之个数可变的形参的实现
Java对世界不同时区timezone之间时间转换的处理方法
![](https://img.aspxhome.com/file/2023/0/72640_0s.jpg)
Spring注解与P/C命名空间超详细解析
详谈Java中的事件监听机制
Repeater中添加按钮实现点击按钮获取某一行数据的方法
![](https://img.aspxhome.com/file/2023/9/106439_0s.png)
Mybatis控制台打印SQL语句的两种方式实现
在Android中动态添加Panel框架的实现代码
浅谈Java后台对JSON格式的处理操作
JAVA面试题 简谈你对synchronized关键字的理解
SpringBoot Web依赖教程
![](https://img.aspxhome.com/file/2023/8/81958_0s.jpg)
Android游戏开发之黑白棋
![](https://img.aspxhome.com/file/2023/3/117153_0s.png)