slf4j api 中存在类 org.slf4j.impl.StaticLoggerBinder、org.slf4j.impl.StaticMarkerBinder、org.slf4j.impl.StaticMDCBinder。但是到具体记录器的每个绑定都应该包含相同的类。
例如:
java类加载器如何替代它?这里不应该是一个例外吗?
我想配置集中登录到 WebLogic 12C。根据业务需求,我必须在生产环境中使用Syslog,并且必须在开发人员和测试环境中提供自定义(例如文件、控制台日志)。我只想为域中的每个应用程序处理 1 个集中日志配置。该应用程序使用 SLF4J API。在 Glassfish 3.1 和 WebLogic 10.3.5 中,当我将 Logback 或 Log4J 桥及其实现放入域库并配置它们时,效果很好。但在 WebLogic 12C 中我遇到了很多问题。主要问题是 WL 已经包含模块之间的 SLF4J 绑定(我不想修改 WL,或者应该吗?)。因此,当我放置第二个绑定时,SLF4J 无法初始化它/它们并使用默认的 JUL 记录器。我还尝试通过 WL 管理控制台配置 Log4J 记录器,但只有服务器消息发送到 Log4J 记录器,应用程序的消息仍然发送到 JUL。(http://docs.oracle.com/cd/E24329_01/web.1211/e24428/config_logs.htm#i1011558,https://forums.oracle.com/forums/thread.jspa?threadID=1037672)
那么,如何在 WebLogic12C 域中仅维护 1 个 Log4J 或 Logback(或满足上述要求的任何其他解决方案)配置?
感谢您的帮助!
我找到了一些预定义的fileNamePatterns TimeBasedRollingPolicy。
这是每分钟都会做的一个。
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logfile.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logfile.%d{yyyy-MM-dd_HH-mm}.log</fileNamePattern>
</rollingPolicy>
</appender>
Run Code Online (Sandbox Code Playgroud)
有谁知道我如何每 x 天执行此操作?
我可以延长吗RollingFileAppender?我正在 Scala 中做这个。
如何从 jboss 模块内登录到 console/server.log?
假设我有一堂课:
public class MyClass {
private static final Logger logger = LoggerFactory.getLogger(MyClass.class);
private boolean done = false;
public void doSomething() {
logger.info("Look ma, I'm logging!");
done = true;
}
public boolean isDone() {
return done;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我想从已部署的工件(例如,MyWebProject.war)登录,我所要做的就是:
编译针对slf4j-api
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
<scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)部署
./jboss-cli.sh -c "deploy MyWebProject.war"
Run Code Online (Sandbox Code Playgroud)利润
2015-10-19 11:04:02,445 INFO [com.myCompany.MyClass] (default task-13) Look ma, I'm logging!
Run Code Online (Sandbox Code Playgroud)但在我的一生中,我无法在 jboss 模块中做到同样的事情。
示例:如果MyWebProject.war使用MyModule.jar, 并MyModule.jar部署为 …
我已经按照Spring Boot Documentation配置了 logback-spring.xml 。这是我的 logback-spring.xml 文件
<configuration>
<springProperty name="appName" source="spring.application.name" defaultValue="myLogFile" />
<property name="log.date" value="%d{yyyy-MM-dd}" />
<property name="log.path" value="/log" />
<property name="log.file" value="${appName}" />
<property name="log.live.path" value="${log.path}/${log.file}.log" />
<appender name="myLogAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.live.path}</file>
<append>true</append>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/archive/${log.file}.${log.date}.log.gz</fileNamePattern>
<maxHistory>1</maxHistory>
</rollingPolicy>
</appender>
<logger name="com.log.logback" level="INFO" />
<logger name="com.log.sample" level="INFO" />
<root level="ERROR">
<appender-ref ref="myLogAppender" />
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
应用程序属性
spring.application.name=mybootapp
Run Code Online (Sandbox Code Playgroud)
当我启动 Spring Boot 应用程序时,我看到在/log路径下创建了 2 个目录,分别是myLogFile和bootstrap。从日志中,我可以看到 bootstrap 目录是在 logback 访问 spring 属性之前创建的。我不知道为什么创建引导目录。<springProperty>在logback xml中使用之前我没有看到这个问题。我这里缺少任何配置吗?我在网上找不到任何相关信息。 …
Slf4j 提供了一些库来“欺骗”后端特定代码库,使其认为特定后端存在,同时将所有日志记录重定向到一个 slf4j api 兼容后端。
简而言之,log4j-over-sl4j 会将 log4j 特定日志记录中的任何内容重定向到 slf4j。
所以我的类路径现在有
slf4j-api
*-over-slf4j
slf4j-simple (to be removed)
我正在尝试为 slf4j 1.8+ 提供自定义日志记录后端(请不要问为什么)。为了开始使用这个,我将 slf4j-simple 复制到我的项目中。
当 slf4j-simple 添加为依赖项日志记录时,会按预期发生,但是当我删除依赖项并简单地将完全相同的内容保留在我自己的代码库中时,它不会拾取它(尽管是不同的包)...
我怎样才能让 sl4j 看到我的自定义提供程序?
更新
我可以看到该 jar 有一些额外的信息,可能是 slf4j 用来选择提供商的信息......
然而,就我而言,我的日志记录后端位于我自己的代码库中(我不想将其分离到库中),那么是否有一个 api 可以将您的提供程序设置为 SLF4J?
我正在构建一个非常简单的应用程序,以便我可以理解 slf4j、桥接库、日志记录实现等。我的应用程序依赖于 slf4j,它使用 logback 进行日志记录实现。此外,它还引入了一个包含 commons-logging 库的库。
应用程序依赖项:
dependencies {
compile project(':library-with-jcl')
compile group: 'org.slf4j', name: 'jcl-over-slf4j', version: '1.7.25'
compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25'
compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'
}
Run Code Online (Sandbox Code Playgroud)
库依赖项:
dependencies {
compile group: 'commons-logging', name: 'commons-logging', version: '1.2'
}
Run Code Online (Sandbox Code Playgroud)
当我不包含时jcl-over-slf4j,库将按预期通过 JCL 输出其日志记录。当我执行includejcl-over-slf4j时,任何通过 JCL 记录器进行的日志记录都会被 slf4j 拾取并重定向到 logback。
我一直在互联网上阅读文章,这些文章说commons-logging如果我的应用程序依赖于 slf4j 和依赖于 JCL 的库,我必须排除依赖项。然而,这似乎没有必要,我不明白为什么。在什么情况下我必须排除 JCL 依赖性?我这里的例子是否太简单而无法暴露潜在的问题?
此外,我没有看到必须排除的建议,例如,如果我使用 log4j 桥,则依赖于它的库中的 log4j 依赖项。为什么不?JCL是特例吗?
我正在运行最新的 IntelliJ 和一个应该有记录器的项目。但是,我得到:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Run Code Online (Sandbox Code Playgroud)
我知道有插件,我尝试了 Log4jMonitor,仍然出现错误。我怎样才能获得日志记录以实际将文件放入它应该使用 IntelliJ 的文件夹中?我需要下载什么以及如何安装?
这是我的日志配置。
<springProfile name="prod">
<root level="info">
<appender name="naki" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>${logging_level}</level> <!-- setup via ENV variable log level -->
</filter>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.contrib.json.classic.JsonLayout">
<timestampFormat>yyyy-MM-dd'T'HH:mm:ss.SSSX</timestampFormat>
<timestampFormatTimezoneId>Etc/UTC</timestampFormatTimezoneId>
<appendLineSeparator>true</appendLineSeparator> <!-- don't forget line break -->
<jsonFormatter class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter">
<prettyPrint>false
</prettyPrint> <!-- in prod never pretty print, line breaks are considered as separate log entry -->
</jsonFormatter>
</layout>
</encoder>
</appender>
</root>
</springProfile>
<springProfile name="dev">
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<root level="info">
<appender-ref ref="CONSOLE"/>
</root>
</springProfile>
Run Code Online (Sandbox Code Playgroud)
这是我得到的输出:
{"timestamp":"2020-01-13T13:38:38.001Z","level":"INFO","thread":"main","logger":"com.nakipower.identity.api.config.Application","message":"Started Application in 8.605 seconds (JVM running for 9.439)","context":"default"}
Run Code Online (Sandbox Code Playgroud)
如何将 JSON …
我有一个 Maven 项目,它使用 Lombok 的内置 @Slf4j 进行记录。目前我的日志在控制台中可见,如下所示
06-Apr-2020 17:42:38.217 INFO [RMI TCP Connection(2)-127.0.0.1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
[2020-04-06 05:42:40,701] Artifact Tarkshala-Scholars-Engine:war exploded: Artifact is deployed successfully
[2020-04-06 05:42:40,701] Artifact Tarkshala-Scholars-Engine:war exploded: Deploy took 4,521 milliseconds
[http-nio-8080-exec-1] …Run Code Online (Sandbox Code Playgroud)