Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将logback配置为遵从Java配置,即logback的纯Java配置_Java_Logging_Slf4j_Logback_Log4j2 - Fatal编程技术网

将logback配置为遵从Java配置,即logback的纯Java配置

将logback配置为遵从Java配置,即logback的纯Java配置,java,logging,slf4j,logback,log4j2,Java,Logging,Slf4j,Logback,Log4j2,我只是不喜欢Logback的XML或Groovy配置,更喜欢用Java进行配置(这也是因为我将在初始化后的不同时间在运行时更改配置) 对Logback进行Java配置的唯一方法似乎是进行某种初始化,或者使用定制的系统属性来告诉Logback不要使用默认配置(这对于单元测试和部署来说相当烦人) 我更喜欢的是类似于logback.xml的东西: <configuration javaConfig="com.myco.LogBackConfig" /> 其中LogbackConfi

我只是不喜欢Logback的XML或Groovy配置,更喜欢用Java进行配置(这也是因为我将在初始化后的不同时间在运行时更改配置)

对Logback进行Java配置的唯一方法似乎是进行某种初始化,或者使用定制的系统属性来告诉Logback不要使用默认配置(这对于单元测试和部署来说相当烦人)

我更喜欢的是类似于
logback.xml的东西:

<configuration javaConfig="com.myco.LogBackConfig" /> 

其中LogbackConfig要么有一些已建立的logback调用的静态方法,要么只是重新实例化一个javabean

也就是说,我需要一个默认的类路径资源,它将告诉logback使用Java而不是groovy/xml。基本上,我想要类似于logback配置的东西

也许有一种方法可以在我错过的Logback中实现这一点

更新:
显然,它与Java ServiceLoader非常相似。

这是一个绝对的黑客攻击,但我认为它对您的案例有效:

在文件logback.xml中,将扫描设置为短间隔:

然后让您的代码修改logback文件,设置适当的级别


Logback将重新扫描xml文件并应用更改。

此功能刚刚合并到Logback的源代码中。请参见另一种方法

回写版本:1.1.2

logback.xml


CustomLoggerContextListener.java

导入ch.qos.logback.classic.Level;
导入ch.qos.logback.classic.Logger;
导入ch.qos.logback.classic.LoggerContext;
导入ch.qos.logback.classic.spi.LoggerContextListener;
导入ch.qos.logback.core.spi.ContextAwareBase;
导入ch.qos.logback.core.spi.LifeCycle;
公共类CustomLoggerContextListener扩展ContextAwareBase实现LoggerContextListener,生命周期{
private boolean start=false;
@凌驾
公开作废开始(){
如果(开始)返回;
LoggerContext lctx=(LoggerContext)getContext();
LoggerConfigurer configurer=新的LoggerConfigurer();
configurer.configure(lctx);
开始=真;
}
@凌驾
公共停车场(){
}
@凌驾
公共布尔值isStarted(){
返回开始;
}
@凌驾
公共布尔值IsResestResistant(){
返回true;
}
@凌驾
public void onStart(LoggerContext上下文){
}
@凌驾
公共void onReset(LoggerContext上下文){
}
@凌驾
顶部公共空白(LoggerContext上下文){
}
@凌驾
public void onLevelChange(记录器,级别){
}
}
LoggerConfigurer.java

导入ch.qos.logback.classic.AsyncAppender;
导入ch.qos.logback.classic.Level;
导入ch.qos.logback.classic.Logger;
导入ch.qos.logback.classic.LoggerContext;
导入ch.qos.logback.classic.encoder.PatternLayoutEncoder;
导入ch.qos.logback.classic.filter.ThresholdFilter;
导入ch.qos.logback.classic.html.HTMLLayout;
导入ch.qos.logback.classic.net.SMTPAppender;
导入ch.qos.logback.classic.spi.ILoggingEvent;
导入ch.qos.logback.core.ConsoleAppender;
导入ch.qos.logback.core.rolling.RollingFileAppender;
导入ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy;
导入ch.qos.logback.core.rolling.TimeBasedRollingPolicy;
导入ch.qos.logback.core.spi.CyclicBufferTracker;
导入ch.qos.logback.core.status.InfoStatus;
导入ch.qos.logback.core.status.StatusManager;
导入java.io.File;
导入java.nio.charset.charset;
导入java.util.array;
导入java.util.List;
公共类日志配置器{
公共void配置(LoggerContext LoggerContext){
loggerContext.reset();
StatusManager sm=loggerContext.getStatusManager();
如果(sm!=null){
添加(新的InfoStatus(“从“+getClass().getName(),loggerContext”设置配置));
}
/**
*根水平
*/
Logger rootLogger=loggerContext.getLogger(Logger.ROOT\u Logger\u NAME);
rootLogger.setLevel(Level.INFO);
/**
*自定义日志级别
*/
loggerContext.getLogger(“com.example.package1”).setLevel(Level.INFO);
loggerContext.getLogger(“com.example.package2”).setLevel(Level.DEBUG);
/**
*控制台附加器
*/
配置ConsoleAppender(loggerContext、rootLogger);
/**
*文件追加器
*/
配置FileAppender(loggerContext、rootLogger);
/**
*SMTP邮件附加器
*/
配置MailAppender(loggerContext、rootLogger);
}
受保护的无效配置ConsoleAppender(LoggerContext LoggerContext,Logger rootLogger){
ConsoleAppender ConsoleAppender=新的ConsoleAppender();
consoleAppender.setContext(loggerContext);
consoleAppender.setName(“myapp日志控制台”);
setEncoder(getEncoder(loggerContext));
consoleApender.start();
rootLogger.addAppender(consoleAppender);
}
受保护的无效配置FileAppender(LoggerContext LoggerContext,Logger rootLogger){
字符串logFileName=“我的日志文件”;
字符串maxFileSize=“500mb”;
字符串logPath=“~/myAppLogs”;
int maxHistory=7;
字符串fileLogLevel=“WARN”;//如果需要
logPath=parseLogPath(logPath);
logFileName=parseLogFileName(logFileName);
RollingFileAppender RollingFileAppender=新的RollingFileAppender();
rollingFileAppender.setContext(loggerContext);
rollingFileAppender.setName(“日志文件”);
rollingFileAppender.setFile(logPath+File.separator+logFileName+“.log”);
rollingFileAppender.setEncoder(getEncoder(loggerContext));
rollingFileAppender.setAppend(true);