我正在尝试使用Log4j2将spring日志打印到文件和控制台中.我想这是我的Log4j2配置中的一个问题.我无法让它发挥作用.我在log4j2.xml文件中有这个配置:
<?xml version="1.0" encoding="UTF-8"?>
<configuration name="defaultConfiguration" status="warn" strict="true" monitorInterval="5">
<properties>
<property name="patternlayout">%d{ISO8601} [%t] %-5level %logger{36} - %msg%n%throwable{full}</property>
<property name="filename">${env:MY_ROOT}/logs/mylog.log</property>
<property name="filenamePattern">${env:MY_ROOT}/logs/mylog-%d{yyyy-dd-MM}-%i.log.gz</property>
</properties>
<appenders>
<appender name="Console" type="Console" target="SYSTEM_OUT">
<layout type="PatternLayout" pattern="${patternlayout}" />
</appender>
<appender name="File" type="RollingFile" fileName="${filename}" filePattern="${filenamePattern}" bufferedIO="true" immediateFlush="true"
append="true">
<layout type="PatternLayout" pattern="${patternlayout}" />
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="50 MB" />
</Policies>
<DefaultRolloverStrategy max="30" />
</appender>
<appender name="AsynchFile" type="asynch" blocking="true" bufferSize="128">
<appender-ref ref="File" />
</appender>
</appenders>
<loggers>
<root level="info">
<appender-ref ref="Console" />
<appender-ref ref="AsynchFile" />
</root>
<logger name="org.springframework.beans"> …Run Code Online (Sandbox Code Playgroud) 是否可以PatternLayout在log4j2.xml配置文件中定义(命名)?
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="ERROR">
<appenders>
<Console name="CONSOLE" target="SYSTEM_OUT">
<PatternLayout pattern="%d %-5p %C{2} (%F:%L) - %m%n" />
</Console>
<File name="DEBUG_FILE" fileName="debug.txt">
<PatternLayout pattern="%d %-5p %C{2} (%F:%L) - %m%n" />
</File>
</appenders>
<loggers>
<root level="trace">
<appender-ref ref="CONSOLE" />
<appender-ref ref="DEBUG_FILE" />
</root>
</loggers>
</configuration>
Run Code Online (Sandbox Code Playgroud)
在这个例子PatternLayout中重复.我可以用名称以某种方式全局定义它,然后只使用名称引用来设置每个appender的模式吗?
我尝试在最新的Java 11上运行我的项目.一切正常,除了特定的文件记录器.日志在以前的Java版本(10,9,8)上运行良好,但在Java 11上则不行.
在服务器运行期间,我只看到1个警告:
警告:不支持sun.reflect.Reflection.getCallerClass.这会影响性能.
这是我的配置:
<Configuration>
<Appenders>
<RollingFile name="postgresDBLog" fileName="${sys:logs.folder}/postgres.log"
filePattern="${sys:logs.folder}/archive/postgres.log.%d{yyyy-MM-dd}">
<PatternLayout>
<pattern>%d{HH:mm:ss.SSS} - %msg%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>
<RollingFile name="workersLog" fileName="${sys:logs.folder}/worker.log"
filePattern="${sys:logs.folder}/archive/worker.log.%d{yyyy-MM-dd}">
<PatternLayout>
<pattern>%d{HH:mm:ss.SSS} - %msg%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>
<RollingFile name="statsLog" fileName="${sys:logs.folder}/stats.log"
filePattern="${sys:logs.folder}/archive/stats.log.%d{yyyy-MM-dd}">
<PatternLayout>
<pattern>%msg%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>
<RollingFile name="userLog" fileName="${sys:logs.folder}/blynk.log"
filePattern="${sys:logs.folder}/archive/blynk.log.%d{yyyy-MM-dd}">
<PatternLayout>
<pattern>%d{HH:mm:ss.SSS} %-5level- %msg%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="cc.blynk.server.workers" level="debug" additivity="false">
<appender-ref ref="workersLog"/>
</Logger>
<Logger name="cc.blynk.server.workers.StatsWorker" level="debug" additivity="false">
<appender-ref ref="statsLog"/>
</Logger>
<Logger name="cc.blynk.server.db" level="debug" additivity="false">
<appender-ref ref="postgresDBLog"/> …Run Code Online (Sandbox Code Playgroud) 我有以下log4j2.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
<appenders>
<RollingFile name="testLog" fileName="test.log" filePattern="" append="false">
<PatternLayout pattern="[%t] %-5level - %msg%n%n"/>
<SizeBasedTriggeringPolicy size="5mb" />
</RollingFile>
</appenders>
<loggers>
<logger name="TestsLogger" level="trace" additivity="false">
<appender-ref ref="testLog"/>
</logger>
<root level="debug">
<appender-ref ref="testLog"/>
</root>
</loggers>
</configuration>
Run Code Online (Sandbox Code Playgroud)
如何修改此配置
如何限制在1中创建的部分日志文件的数量?我想要实现的是如下方案:
creating test1.log [present log files: test1.log]
test1.log - 5mb limit reached
creating test2.log [present log files: test1.log, test2.log]
test2.log - 5mb limit reached
creating test3.log [present log files: test2.log, test3.log]
test3.log - 5mb limit reached
creating test4.log [present log files: …Run Code Online (Sandbox Code Playgroud)log4中没有logger.setLevel()方法.那么如何在运行时设置日志级别.
我正在努力将Java项目从使用log4j 1.2迁移到使用log4j 2.
log4j 1.x有一个org.apache.log4j.DailyRollingFileAppender在我的项目的log4j.properties配置文件中提到的类.DailyRollingFileAppenderlog4j 2中不再存在具有相同名称的类 .我想知道是否DailyRollingFileAppender可以用log4j 2中的其他类或某些替换配置或实现替换该角色.
迁移指南强调应用程序不能访问log4j 1.x内部的方法和类,例如Appenders,因为它可以迁移到log4j 2.但是为了进行迁移,可以做些DailyRollingFileAppender什么呢?是否可以通过某些自定义配置或log4j 2中的类组合替换它?迁移指南中有一些配置示例,特别是一个配置示例FileAppender,但是怎么样DailyRollingFileAppender?这是一个非常接近基本的东西FileAppender:
来自log4j 1.2 API Javadoc,类org.apache.log4j.DailyRollingFileAppender
DailyRollingFileAppender扩展FileAppender,以便以用户选择的频率滚动基础文件.据观察,DailyRollingFileAppender会出现同步问题和数据丢失.log4j extras随附包括应考虑用于新部署的备选方案,并在org.apache.log4j.rolling.RollingFileAppender的文档中进行了讨论.
我在我的应用程序中使用Log4J v2.0 Beta3进行日志记录,并且在运行单元测试时生成了日志消息.我检查了API以某种方式将日志级别设置为CRITICAL,但我找不到任何方法来更改记录器配置.
事实上,我在log4j2网站上看到了这个:
请注意,与Log4j 1.x不同,公共Log4j 2 API不会公开添加,修改或删除appender和过滤器或以任何方式操作配置的方法.
所以说.在单元测试中禁用日志记录的正确方法是什么?
我试图每小时创建新的日志文件.我在RollingFileAppender中使用lo4j2的TimeBasedTriggerringPolicy.下面是我从log4j2官方网站上获取的示例xml配置代码.
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
<Appenders>
<RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/$${date:yyyy-MM}/app-%d{yyyy-MM-dd-HH}-%i.log.gz">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
<Policies>
**
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
**
<SizeBasedTriggeringPolicy size="250 MB" />
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="RollingFile" />
</Root>
</Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)
在interval属性中,我设置了1表示1小时.但我的文件仍然不会每1小时滚动一次.
请帮我发现任何错误.
注意:我已经包含了log4j2的beta9(这是最新的)
我有log4j-api-2.0.0.jar并log4j-core-2.0.2.jar导入到我的构建路径中.但不知何故,以下代码失败了:
import org.apache.logging.log4j.core.Logger;
public class TheClass {
private static Logger log = Logger.getLogger(TheClass.class);
...
Run Code Online (Sandbox Code Playgroud)
并且错误消息显示:
The method getLogger(Class<TheClass>) is undefined for the type Logger
我只是好奇getLogger()不再是Logger中的有效方法?
我们已经迁移了所有代码以使用slf4 API来使用通用API,但是现在我们正在考虑从log4j 1.x升级到log4j 2.x. 如果我们使用slf4j API和log4j2作为实现,我们是否能够使用log4j2的所有功能?