解决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


猜你喜欢
- 本文实例讲述了C#实现闪动托盘图标效果的方法。分享给大家供大家参考,具体如下:在用户正在登录QQ或者使用Firemail邮件系统自动收取邮件
- 虽然闭包主要是函数式编程的玩意儿,而C#的最主要特征是面向对象,但是利用委托或lambda表达式,C#也可以写出具有函数式编程风味的代码。同
- 背景公司线上有个tomcat服务,里面合并部署了大概8个微服务,之所以没有像其他微服务那样单独部署,其目的是为了节约服务器资源,况且这8个服
- 遇到的问题!注:自定义CommentGenerator的都知道通过实现CommentGenerator接口的一些不足,毕竟只是实现了Comm
- 近日在工作中需要根据设备的HardwareID来获取设备的驱动程序信息,比如驱动程序版本等。经过摸索,得到了两种不同的解决办法,两种办法各有
- 这篇文章主要介绍了java加载property文件配置过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
- 什么是NIO?线程在处理数据时,如果线程还处于将数据从channel读到buffer的这段时间内,线程可以去做别的事情,等数据都读到buff
- 前言:发现用Winform做一个圆角按钮遇到麻烦,主要是锯齿问题,后面想了想办法解决问题了。主要方法是按钮的区域通过Region指定,但按钮
- 本文为大家分享了Android Studio使用USB真机调试的具体方法,供大家参考,具体内容如下以小米4为例,先将手机通过USB连接电脑,
- 这是一个android开屏布局的实例,可以用于加载广告图片和倒计时的布局。程序中设置的LayoutParams,划分额外空间比例为6分之5,
- 目录带装饰效果的 ContainerRow 行布局和 Column列布局ListView列表组件GridView网格组件代码实现结语:左侧是
- 本文实例讲述了C#查找对象在ArrayList中出现位置的方法。分享给大家供大家参考。具体分析如下:我们可以通过IndexOf方法来查找对象
- 本文实例讲述了C#基于NPOI生成具有精确列宽行高的Excel文件的方法,是非常具有实用价值的技巧分享给大家供大家参考。具体方法如下:。一、
- 一:将String字符串放在最前面防止发生NullPointerException异常,我们通常把String字符串放在equals方法的左
- @ApiImplicitParam作用在方法上,表示单独的请求参数参数name:参数名。value:参数的具体意义,作用。required:
- redisson的几大特性相信看了这个标题的同学,对这个问题以已经非常不陌生了,信手拈来redisson的几大特性:可重入性【多个业务线同一
- 最近我要做一个爬虫。这个爬虫需要如下几个步骤:1 填写注册内容(需要邮箱注册)2 过拖拽验证码(geetest)3 注册成功会给邮箱发一封确
- 本文主要实现在自定义的ListView布局中加入CheckBox控件,通过判断用户是否选中CheckBox来对ListView的选中项进行相
- 本文实例讲述了C#简单输出日历的方法。分享给大家供大家参考。具体如下:用C#输出日历,此功能可用于Ajax方式列出计划日程相关的内容,由于是
- Android ListView填充数据的方法因为多人开发,为了是自己开发的模块方便融合到主框架中,同时也为了减小apk的大小,要求尽可能少