我以编程方式设置了 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.
我已经按照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中使用之前我没有看到这个问题。我这里缺少任何配置吗?我在网上找不到任何相关信息。 …
我想以编程方式配置 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) 这是我的日志配置。
<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 …
我有一个方法,我想添加特定的日志记录:
@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) 我是 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?
我添加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) 如何在JSP/Servlet项目中实现和使用log4j/logback?使用logback而不是log4j有什么好处?
假设我有两个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) 我正在尝试使用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