我的基于java的logback(无xml)配置被忽略 [英] My logback java based (no xml) config is ignored
问题描述
尝试配置回溯,并且无法在运行应用程序时使用我的配置。
Trying to configure logback and not able to have my configuration used when running the app.
即使我删除了所有配置,也有很多控制台输出,并且没有文件输出,所以我想控制台输出是用一些默认配置完成的。
There is a lot of console output, even if I remove all my configuration, and there is no file output, so I suppose the console output is done with some default configuration.
这是我到目前为止的配置:
Here is my configuration so far:
@Configuration
public class Log4j {
private final static String PATTERN = "%date %-5level [%thread] %logger{36} %m%n %rEx";
@Bean
public static LoggerContext loggerContext() {
return (LoggerContext) LoggerFactory.getILoggerFactory();
}
@Bean (initMethod = "start", destroyMethod = "stop")
public static PatternLayoutEncoder encoder (LoggerContext ctx) {
PatternLayoutEncoder encoder = new PatternLayoutEncoder();
encoder.setContext(ctx);
encoder.setPattern(PATTERN);
return encoder;
}
@Bean (initMethod = "start", destroyMethod = "stop")
public static ConsoleAppender consoleAppender (LoggerContext context, PatternLayoutEncoder encoder) {
ConsoleAppender consoleAppender = new ConsoleAppender();
consoleAppender.setContext(context);
consoleAppender.setEncoder(encoder);
return consoleAppender;
}
@Bean (initMethod = "start", destroyMethod = "stop")
public static FileAppender fileAppender(LoggerContext context, PatternLayoutEncoder encoder) throws IOException {
RollingFileAppender fileAppender = new RollingFileAppender();
fileAppender.setContext(context);
fileAppender.setEncoder(encoder);
fileAppender.setFile("build.log");
return fileAppender;
}
@Bean (initMethod = "start", destroyMethod = "stop")
public static SMTPAppender mailAppender(LoggerContext context) {
SMTPAppender mailAppender = new SMTPAppender();
mailAppender.setContext(context);
mailAppender.setName("GmailAppender");
mailAppender.setSMTPHost("smtp.gmail.com");
mailAppender.setSMTPPort(465); // 587
mailAppender.setSTARTTLS(true);
mailAppender.setUsername("xxxxxx@gmail.com");
mailAppender.setPassword("xxxxxx");
mailAppender.setFrom("xxxxxx@gmail.com");
mailAppender.addTo("xxxxxx@gmail.com");
mailAppender.setSubject("[LOG] Java - learnintouch");
PatternLayout patternLayout = new PatternLayout();
patternLayout.setPattern(PATTERN);
mailAppender.setLayout(patternLayout);
LevelFilter levelRangeFilter = new LevelFilter();
levelRangeFilter.setLevel(Level.ERROR);
mailAppender.addFilter(levelRangeFilter);
return mailAppender;
}
@Bean
public static Logger registerSpringLogger(ConsoleAppender consoleAppender) {
Logger logger = new Logger(...
logger.setLevel(Level.DEBUG);
logger.addAppender(consoleAppender);
return logger;
}
即使我将所有寄存器bean设置为OFF级别,控制台中仍有很多输出。
Even if I set all the register beans to OFF level there is still a lot of output in the console.
如何进行上述配置不被忽略?
How can I have my above configuration NOT being ignored ?
更新:实际上,配置没有被忽略,它被简单地淹没在很多控制台输出中。减少这个控制台输出的一种方法是在 src / main / resources
目录中添加一个logback.xml文件,其中包含以下内容:
UPDATE: In fact, the configuration was not ignored, it was simply drowned in a lot of console output. One way to reduce this console output was to add a logback.xml file in the src/main/resources
directory containing the following:
<?xml version="1.0" encoding="UTF-8"?>
<!-- This empty file is one way to prevent logback from logging like crazy -->
<configuration />
然后,以下配置允许我仅输出我的应用程序记录器和sql语句:
Then, the following configuration allowed me to output only my application loggers and the sql statements:
@Bean
public static Logger registerThalasoftLogger(LoggerContext loggerContext,
ConsoleAppender consoleAppender, FileAppender fileAppender) throws IOException {
Logger logger = loggerContext.getLogger("com.nsn.nitro.project.data");
logger.setLevel(Level.DEBUG); // Display the application loggers
logger.addAppender(consoleAppender);
logger.addAppender(fileAppender);
return logger;
}
@Bean
public static Logger registerSpringLogger(LoggerContext loggerContext,
ConsoleAppender consoleAppender) {
Logger logger = loggerContext.getLogger("org.springframework");
logger.setLevel(Level.OFF);
logger.addAppender(consoleAppender);
return logger;
}
@Bean
public static Logger registerJdbcSqlOnlyLogger(LoggerContext loggerContext,
ConsoleAppender consoleAppender, FileAppender fileAppender) throws IOException {
Logger logger = loggerContext.getLogger("jdbc.sqlonly");
logger.setLevel(Level.DEBUG); // Display the sql statements with their parameters values
logger.addAppender(consoleAppender);
logger.addAppender(fileAppender);
return logger;
}
@Bean
public static Logger registerHibernateTypeLogger(LoggerContext loggerContext,
ConsoleAppender consoleAppender) {
Logger logger = loggerContext.getLogger("org.hibernate.type");
logger.setLevel(Level.OFF);
logger.addAppender(consoleAppender);
return logger;
}
@Bean
public static Logger registerHibernateSqlLogger(LoggerContext loggerContext,
ConsoleAppender consoleAppender) {
Logger logger = loggerContext.getLogger("org.hibernate.SQL");
logger.setLevel(Level.OFF);
logger.addAppender(consoleAppender);
return logger;
}
@Bean
public static Logger registerLog4JdbcLogger(LoggerContext loggerContext,
ConsoleAppender consoleAppender) throws IOException {
Logger logger = loggerContext.getLogger("log4jdbc.debug");
logger.setLevel(Level.OFF);
logger.addAppender(consoleAppender);
return logger;
}
请注意,我认为此更新是一种解决方法,而不是解决方案它使用了logback.xml文件。我最初的问题是关于XML免费配置。
Note that I see this update as a work around and not as a solution since it makes use of a logback.xml file. My original question was about an XML free configuration.
推荐答案
为了能够重新配置,我们需要这样的实现记录我们的应用程序,所以我们决定开源(在Apache 2.0许可下)并将其放在Github上。请查看 logback-configuration 项目。
We needed something like this implemented in order to be able to re-configure the logging of our application, so we decided to open source it (under an Apache 2.0 license) and put it on Github. Please have a look at the logback-configuration project.
如果您觉得它很有用,请告诉我(通过电子邮件发送给我,您可以在项目的 pom.xml
上找到我的电子邮件,或回复在这里)我将发布并推送到Maven Central。
If you find it useful, let me know (either e-mail me, you can find my e-mail on the project's pom.xml
, or reply here) and I'll make a release and push it to Maven Central.
该项目非常小,但非常简单。您可以查看一些测试,以便更好地了解如何做事。
The project is pretty small, but very straight-forward. You can have a look at the handful of tests to better understand how to do things.
这篇关于我的基于java的logback(无xml)配置被忽略的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!