我有一个要求,其中我需要创建日志文件,以便基于标签(最好是文本)的所有日志都需要记录到相应的日志文件中。
例如,
我有关于苹果、橙子和芒果的日志。
logger.info("Apples: They are red in color");
logger.info("Oranges: They are orange in color");
logger.info("Mangoes: They are yellowish in color");
Run Code Online (Sandbox Code Playgroud)
根据我的要求,第一个日志应记录到Apples.log,第二个日志记录到Oranges.log,第三个日志记录到Mangoes.log
日志文件应该动态创建。
下面显示的是我的logback.xml文件
<statusListener class="ch.qos.logback.core.status.NopStatusListener"/>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>
%d %-5p - %marker%m%n
</Pattern>
</encoder>
</appender>
<appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator>
<key>fruitName</key>
<defaultValue>Common_logs</defaultValue>
</discriminator>
<sift>
<appender name="FILE-${instanceName}" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>./Logs/${fruitName}/${instanceName}.log</fileNamePattern>
<maxHistory>50</maxHistory>
<cleanHistoryOnStart>false</cleanHistoryOnStart>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>%d %-5p - %m%n</pattern>
</encoder>
</appender>
</sift>
</appender>
<logger name="AssetInstanceService" level="info" additivity="false">
<appender-ref …Run Code Online (Sandbox Code Playgroud) 我有一个项目,Spring Boot我在其中添加带有@Slf4j注释的日志,但在启动项目时无法让它们显示在终端中。
这是日志:log.info("totalVacations: " + totalVacations);
当我在终端中运行命令mvn spring-boot:run 时,我看不到该消息。
我需要你的帮助。我对 Lombok 注释 @Slf4j 有疑问。当我尝试使用它时,我无法使用它的功能:

这是我的 build.gradle 文件:

我已经将 Lombok 安装到我的 IntelliJ Idea 中并启用了注释处理,但它还没有给我结果。你能给一些建议吗?我会很感激!
我的问题与这篇文章中概述的问题非常相似(尚未得到解答):Is SLF4jJ 1.8.0-alpha2 Compatible with Log4j 2.8.2。
我正在尝试从 slf4j 1.7.36 升级到 2.0.0-alpha7。
目前我的 POM 中有这个:
<!-- https://logging.apache.org/log4j/2.x/maven-artifacts.html -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.17.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.36</version>
</dependency>
<!-- https://logging.apache.org/log4j/2.x/maven-artifacts.html -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2
Run Code Online (Sandbox Code Playgroud)
.17.2
这按预期工作。
每次我尝试将 slf4j 更改为 2.0.0-alpha7 时,都会收到以下错误:
SLF4J:未找到 SLF4J 提供程序。SLF4J:默认为无操作 (NOP) 记录器实现 SLF4J:请参阅http://www.slf4j.org/codes.html#noProviders了解更多详细信息。SLF4J:类路径包含针对 1.8 之前的 slf4j-api 版本的 SLF4J 绑定。
有谁知道是什么原因造成的?
当我包含hibernate-c3p0在我的Maven pom.xml文件中时,我得到了一个NoClassDefFoundError无法找到的运行时org.slf4j.impl.StaticLoggerBinder.我的印象是Maven会解决这种依赖 - 所以如果c3p0需要slf4j,那么slf4j将被下载并包含在内.
我的pom.xml档案有:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>3.3.1.GA</version>
</dependency>
Run Code Online (Sandbox Code Playgroud) 我正在尝试禁用logback-test.xml中所有外部库的日志输出.不知何故,它不像宣传的那样工作,我不明白为什么.
这是我的logback-test.xml的内容:
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</Pattern>
</layout>
</appender>
<!-- Turn off third party chatter -->
<logger name="httpclient.wire" level="OFF" />
<logger name="o.s" level="OFF"/>
<logger name="org.spring" level="OFF"/>
<logger name="org.apache" level="OFF"/>
<root level="DEBUG">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我明确地关闭了org.spring记录器,但我仍然看到Spring的所有调试输出.但是,如果我在元素中指定了不同的级别,它就可以工作.任何想法为什么会发生?
我正在考虑将java 1.4.2项目从log4j迁移到slf4j.这是参数化日志记录和代码清晰度的优点(不需要log.isdebug ..)这让我想到了这样的考虑.
是否有转换为slf4j的性能开销?
上次我检查是否可以使用logback时,它对jdk有一个要求,它要求它至少为1.5,这就是我考虑slf4j和log4j的原因.
我打电话时收到以下异常
configuration.configure(hibernate.cfg.xml).buildSessionFactory():
Exception in thread "main" java.lang.NoSuchMethodError: org.slf4j.Logger.isTraceEnabled()Z
at org.hibernate.type.NullableType.<clinit>(NullableType.java:59)
at org.hibernate.Hibernate.<clinit>(Hibernate.java:103)
at org.hibernate.type.TypeFactory.<clinit>(TypeFactory.java:69)
at org.hibernate.mapping.ManyToOne.getType(ManyToOne.java:49)
at org.hibernate.mapping.ManyToOne.createForeignKey(ManyToOne.java:62)
at org.hibernate.cfg.HbmBinder.createProperty(HbmBinder.java:2213)
at org.hibernate.cfg.HbmBinder.createClassProperties(HbmBinder.java:2170)
at org.hibernate.cfg.HbmBinder.createClassProperties(HbmBinder.java:2060)
at org.hibernate.cfg.HbmBinder.bindRootPersistentClassCommonValues(HbmBinder.java:381)
at org.hibernate.cfg.HbmBinder.bindRootClass(HbmBinder.java:295)
at org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:166)
at org.hibernate.cfg.Configuration.add(Configuration.java:702)
at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:537)
at org.hibernate.cfg.Configuration.addResource(Configuration.java:599)
at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1621)
at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1589)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1568)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1542)
at org.hibernate.cfg.Configuration.configure(Configuration.java:1462)
at com.enwelib.server.hibernate.helper.HibernateVendHelper.<init>(HibernateVendHelper.java:47)
at com.ensarm.crawler.CrawlManager.saveEntity(CrawlManager.java:93)
at com.ensarm.crawler.CrawlManager.main(CrawlManager.java:30)
Run Code Online (Sandbox Code Playgroud) 我正在为REST API开发一个JAVA客户端.我正在为客户使用Retrofit.我看到我可以在改造中创建适配器时设置日志级别.所有这些日志目前都进入控制台.但是,我想将其重定向到由已在应用程序中使用的logback生成的日志.我该怎么做呢 ?
RestAdapter restAdapter = new RestAdapter.Builder()
.setLogLevel(RestAdapter.LogLevel.FULL).setEndpoint(APP_URL)
.setRequestInterceptor(new AuthRequestInterceptor())
.setErrorHandler(new RetrofitErrorHandler()).build();
Run Code Online (Sandbox Code Playgroud)
产量
---> HTTP GET http://localhost:8080/services/v1/countries
Auth-Token: ...
---> END HTTP (no body)
<--- HTTP 200 http://localhost:8080/services/v1/countries (448ms)
Transfer-Encoding: chunked
: HTTP/1.1 200 OK
Vary: Accept-Encoding
Date: Thu, 04 Jun 2015 01:36:29 GMT
Content-Type: application/json
...
<--- END HTTP (9130-byte body)
Run Code Online (Sandbox Code Playgroud)
我想要所有这些都去记录器日志.
在我的项目中,我使用客户库.在这些库中使用log4j.
我喜欢logback.slf4j在这种情况下可以在我的项目中使用吗?
我想使用logback的所有功能,尤其是动态配置更新.