标签: logback

如何以编程方式禁用 Logback 输出到控制台但附加到文件

我以编程方式设置了 Logback 文件附加器,并将日志级别设置为ALL. 原因是设置日志级别,ALL我想记录文件包含所有日志详细信息,例如(INFO,DEBUG,WARN and etc...)但我想避免来自控制台的这些详细信息。如果有人知道,请让我知道如何以编程方式禁用 Logback 输出到控制台。

记录器代码片段

参考

private static Logger createLoggerFor(String string, String file) {
          LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
          PatternLayoutEncoder ple = new PatternLayoutEncoder();

          ple.setPattern("%date %level [%thread] %logger{10} [%file:%line] %msg%n");
          ple.setContext(lc);
          ple.start();
          FileAppender<ILoggingEvent> fileAppender = new FileAppender<ILoggingEvent>();
          fileAppender.setFile(file);
          fileAppender.setEncoder(ple);
          fileAppender.setContext(lc);
          fileAppender.start();

          Logger logger = (Logger) LoggerFactory.getLogger(string);
          logger.addAppender(fileAppender);
          logger.setLevel(Level.ALL);
          logger.setAdditive(false); /* set to true if root should log too */

          return logger;
    }
Run Code Online (Sandbox Code Playgroud)

注意:当我设置日志级别WARN或DEBUG详细信息时,日志文件以及控制台输出中不会显示。但我想将所有详细信息记录到日志文件中,包括INFO.

java logging logback

3
推荐指数
1
解决办法
4644
查看次数

Spring Boot 与 Logback + springProperty

我已经按照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中使用之前我没有看到这个问题。我这里缺少任何配置吗?我在网上找不到任何相关信息。 …

spring logback slf4j spring-boot

3
推荐指数
1
解决办法
2万
查看次数

TimeBasedRollingPolicy 以编程方式登录

我想以编程方式配置 logback TimeBasedRollingPolicy,但它不会在路由文件夹中创建我的日志文件。这是我调用记录器创建者类的代码:

    CreateLogger LoggerClass=new CreateLogger();
        private final Logger logger = loggerClass.createLoggerFor("foo", "D:\\logback/testLogback.log");
logger.debug("11111");
Run Code Online (Sandbox Code Playgroud)

D:\logback/testLogback.log 是主日志文件。这是 LoggerCreator 类:

public class CreateLogger {
    public Logger createLoggerFor(String string, String file) {
        LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
        PatternLayoutEncoder ple = new PatternLayoutEncoder();
    ple.setPattern("%date %level [%thread] %logger{10} [%file:%line] %msg%n");
    ple.setContext(lc);
    ple.start();
    FileAppender<ILoggingEvent> fileAppender = new FileAppender<ILoggingEvent>();
    fileAppender.setFile(file);
    fileAppender.setEncoder(ple);
    fileAppender.setContext(lc);
    fileAppender.start();

    RollingFileAppender logFileAppender = new RollingFileAppender();
    logFileAppender.setContext(lc);
    logFileAppender.setName("debug");
    logFileAppender.setEncoder(ple);
    logFileAppender.setAppend(true);
    logFileAppender.setFile(file);
    TimeBasedRollingPolicy logFilePolicy = new TimeBasedRollingPolicy();
    logFilePolicy.setContext(lc);
    logFilePolicy.setParent(logFileAppender);
    logFilePolicy.setFileNamePattern("D:\\logback/archived/testLogBack.%d{yyyy-MM-dd}.%i.log");
    logFilePolicy.setMaxHistory(7);
    logFilePolicy.start();

    logFileAppender.setRollingPolicy(logFilePolicy);
    logFileAppender.start();
    Logger logger …
Run Code Online (Sandbox Code Playgroud)

java logging weblogic logback

3
推荐指数
1
解决办法
2050
查看次数

如何使用 Logback 更改 JSON 输出中的键名称?

这是我的日志配置。

<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 …

java logging spring logback slf4j

3
推荐指数
1
解决办法
2821
查看次数

使用可选参数记录日志

我有一个方法,我想添加特定的日志记录:

@Slf4j
@Service
public class SomethingService {

    public void doSomething(Something data, String comment, Integer limit) {
        Long id = saveSomethingToDatabase(data, comment);
        boolean sentNotification = doSomething(id);
        // ...

        // Log what you done.
        // Variables that always have important data: data.getName(), id
        // Variables that are optional: sentNotification, comment, limit 
        // (optional means they aren't mandatory, rarely contains essential data, often null, false or empty string).
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以简单地记录所有:

log.info("Done something '{}' and saved (id {}, sentNotification={}) with comment '{}' and …
Run Code Online (Sandbox Code Playgroud)

java log4j logback slf4j log4j2

3
推荐指数
1
解决办法
5278
查看次数

是否可以通过编程方式设置 logback 配置?

我是 logback 的新手,我想以编程方式配置 logback。目前我正在使用如下静态配置:

<configuration>
    <appender name="KIWI" class="ch.qos.logback.classic.net.SyslogAppender">
        <syslogHost>localhost:8080</syslogHost>
        <facility>LOCAL0</facility>
        <suffixPattern>%thread: %-5level %logger{36} - %msg%n</suffixPattern>
    </appender>
    
    <logger name="com.javacodegeeks.examples.logbacksyslogexample.message.kiwi" level="INFO">
        <appender-ref ref="KIWI" />
    </logger>
</configuration>
Run Code Online (Sandbox Code Playgroud)

是否可以动态设置 syslogHost?

java syslog logback spring-boot

3
推荐指数
1
解决办法
2817
查看次数

接收器类 ch.qos.logback.classic.util.DefaultJoranConfigurator 未定义或继承已解析方法的实现

我添加spring hateoas到一个项目中,但无法启动该项目。

我添加了这些库:

    implementation 'com.toedter:spring-hateoas-jsonapi:2.0.1'
    implementation 'org.springframework.boot:spring-boot-starter-hateoas:3.0.2'
Run Code Online (Sandbox Code Playgroud)

我有这个logback-spring配置:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <springProperty scope="context" name="filename" source="app.logging.filename" defaultValue="application"/>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy.MM.dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{36}:%L) - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="DAILY_ROLLING_FILE_APPENDER_JSON" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/${filename}.json</file>

        <!-- TBD: This encoder differs from the one used in the Dashboard project in order to generate JSON output -->
        <encoder class="net.logstash.logback.encoder.LogstashEncoder"/>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logs/archived/${filename}-%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
            <totalSizeCap>100MB</totalSizeCap>
        </rollingPolicy>
    </appender>

    <!-- config for STDOUT and SAVE-TO-FILE -->
    <springProfile name="local">
        <root level="info">
            <appender-ref …
Run Code Online (Sandbox Code Playgroud)

logback hateoas spring-hateoas spring-boot

3
推荐指数
1
解决办法
9018
查看次数

如何在我的项目中使用log4j?log4j的logback优势?

如何在JSP/Servlet项目中实现和使用log4j/logback?使用logback而不是log4j有什么好处?

java servlets log4j logback

2
推荐指数
1
解决办法
2716
查看次数

如何在Logback中过滤堆栈跟踪帧

假设我有两个Java类:foo.ClassA和bar.ClassB.要打印(根)异常堆栈跟踪,我需要只打印foo包的帧.我的问题是我是如何配置Logback来做到这一点的.
我知道该功能已在Logback中实现,我需要使用evaluator.但我无法理解.我尝试了这里描述的例子没有成功(毫不奇怪).

任何人都可以提供过滤堆栈跟踪帧的确切配置吗?

<configuration>
  <evaluator name="FILTER">
    <expression>¿what should I put here?</expression>
  </evaluator>

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
    <encoder>
      <pattern>[%thread] %-5level - %msg%n%rEx{full, FILTER}</pattern>
    </encoder>
  </appender>

  <root level="DEBUG"> 
    <appender-ref ref="STDOUT" /> 
  </root>
</configuration>
Run Code Online (Sandbox Code Playgroud)

java logging logback

2
推荐指数
2
解决办法
3341
查看次数

尝试使用logback appender登录Splunk

我正在尝试使用splunk的logback appender直接在我的Java应用程序中记录splunk.

似乎什么都没有发生什么,但是当我在REST客户端手动发出post命令时,我在splunk中看到了我的数据.

我无法获得正式的splunk logback测试.

logback.xml

  <appender name="SPLUNK" class="com.splunk.logging.HttpEventCollectorLogbackAppender">
    <url>http://mySplunkUrl:8088/services/collector</url>
    <token>1234566789</token>
    <disableCertificateValidation>true</disableCertificateValidation>
    <batch_size_count>1</batch_size_count>
    <layout class="ch.qos.logback.classic.PatternLayout">
      <pattern>%msg</pattern>
    </layout>
  </appender>

  <root level="trace">
    <appender-ref ref="SPLUNK" />
  </root>

</configuration>
Run Code Online (Sandbox Code Playgroud)

单元测试

@Test
public void splunkLogger() {
    Logger logger = LoggerFactory.getLogger(LogFactoryTest.class);
    Date date = new Date();
    String jsonMsg = String.format("{event:'CancerCenterTest'}");
    logger.info("CancerCenterTest");
    logger.info(jsonMsg);
}
Run Code Online (Sandbox Code Playgroud)

这是我尝试使用的文档:http://dev.splunk.com/view/splunk-logging-java/SP-CAAAE7M

我错过了一些明显的东西吗

编辑 这是我项目的链接 - https://github.com/toymachiner62/splunk-logging

java logback splunk

2
推荐指数
1
解决办法
3249
查看次数