我在我的项目中使用log4j2,如下所示:
logger.log(Level.ERROR, this.logData);
Run Code Online (Sandbox Code Playgroud)
我的配置文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="ERROR" DLog4jContextSelector="org.apache.logging.log4j.core.async.AsyncLoggerContextSelector">
<Appenders>
<!-- Async Loggers will auto-flush in batches, so switch off immediateFlush. -->
<RandomAccessFile name="RandomAccessFile" fileName="C:\\logs\\log1.log" immediateFlush="false" append="false">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m %ex%n</Pattern>
</PatternLayout>
</RandomAccessFile>
</Appenders>
<Loggers>
<Root level="error" includeLocation="false">
<AppenderRef ref="RandomAccessFile"/>
</Root>
</Loggers>
Run Code Online (Sandbox Code Playgroud)
它创建了我的文件,我记录了它,但它仍然是空的.当我尝试删除此文件时,操作系统告诉我它正在使用(如果应用程序当前正在工作),但即使我停止应用程序,文件仍然是空的.
那么我应该更改哪些设置才能使其正常工作?
我正在尝试设置log4j2 xml配置,但我没有得到我想要的结果.我希望我的控制台获得级别信息及以上,以及滚动文件appender(标准)以获得级别调试及以上.然后我想限制控制台appender中的3个类只接收警告及以上.但是,当我添加这些记录器条目时,我的标准appender也会停止接收这3个类的信息和调试级别.我该怎么办才能限制控制台而不是标准?
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out"/>
<param name="threshold" value="info" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ABSOLUTE} %-5p %c [%t] %X{ctx} ~ %m%n" />
</layout>
</appender>
<appender name="standard" class="org.apache.log4j.DailyRollingFileAppender">
<param name="file" value="logs/broadcast.log" />
<param name="DatePattern" value="'.'yyyy-MM-dd" />
<param name="threshold" value="debug" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{DATE} %-5p %c{1} [%t] %X{ctx} ~ %m%n" />
</layout>
</appender>
<appender name="stderr" class="org.apache.log4j.FileAppender">
<param name="file" value="logs/broadcast.err" />
<param name="threshold" value="error" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{DATE} …Run Code Online (Sandbox Code Playgroud) 我已将我的log4j2自定义插件打包到一个单独的jar(仅包含插件类)中,并将其放在应用程序类路径中.但它没有被发现.
我用谷歌搜索发现它是一个错误 - 不再使用"packages"参数.还有一些链接提供了一些替代方案,其中maven pom.xml和log4j2插件dat文件在上下文中.问题是我不熟悉maven,也不知道如何生成dat文件.我只知道它包含在log4j-2.1-core.jar中,其中现有的log4j2插件在pom.xml中定义.
有人可以建议我如何使我的自定义插件工作?
我经历了这个 - Log4j2自定义插件 - 使用Maven Assembly Plugin进行注释处理
但目前尚不清楚.我正在关注解决方案但不确定如何为自定义插件创建插件dat文件或者我需要在哪里进行更改...
通过 System.out,您可以:
System.out.print
System.out.println
Run Code Online (Sandbox Code Playgroud)
有时我不需要换行符(例如当我打印“关于提交事务...完成”时)。使用 System.out 我会这样做:
System.out.print("About to commit transaction...");
System.out.println("done.");
Run Code Online (Sandbox Code Playgroud)
我不知道如何在 log4j 中执行此操作。我的 log4j 属性文件有这样的:
log4j.rootLogger=DEBUG, CA
log4j.appender.CA=org.apache.log4j.ConsoleAppender
log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.CA.layout.ConversionPattern=%-30c{1} %x %-30M - %m%n
Run Code Online (Sandbox Code Playgroud)
我不想简单地删除“%n”并且必须在每个日志记录语句中指定它。
这在 Log4j 中可能吗?
我想在运行时在log4j2中关闭我的调试语句.根据文档,我们可以做到这一点.我将我的log4j.xml文件保存在默认包中,然后将jar放在其中.因为我无法使用Dlog4j.configuration =/path/to/log4j.xml修改jar我指定的xml文件.但是,这不起作用.我使用file:// uri尝试了所有组合的所有内容,但仍然没有选择xml.
我目前正在创建一个可以拥有模块的系统(将它们视为插件),其中每个模块都可以拥有自己的专用日志.
我想使用log4j2项目进行日志记录,但我似乎对文件appender有些麻烦.
主项目(模块加载器和整个事物的"核心")应该有自己的日志文件,而模块应该有自己的(如mod_XXXXXXXX.log).
通过阅读有关appender的文档,我发现了这个FileAppender类,我打算使用它.直到我发现我不能简单地将appender添加到由创建的默认记录器LogManager.getLog().
LogManager返回的记录器是与Logger接口不同的记录器.
甚至搜索都没有给我任何近乎解决方案,我发现只是xml配置中的预定义文件日志 - 这不是我想要的.
谢谢你的阅读; 即使是最轻微的线索也欢迎:)
我正在使用log4j2和slf4j以及hibernate 4.3.1.我在显示SQL查询的参数时遇到问题.我没有找到任何显示它们(SQL查询很好地显示但没有参数).这是我在persistence.xml中指定的内容:
<persistence version="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://www.oracle.com/webfolder/technetwork/jsc/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="xxxxx" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<properties>
<property name="hibernate.archive.autodetection" value="class" />
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.use_sql_comments" value="true"/>
<property name="hibernate.query.factory_class"
value="org.hibernate.hql.internal.classic.ClassicQueryTranslatorFactory" />
<property name="max_fetch_depth" value="2" />
<property name="hibernate.jdbc.batch_size" value="100" />
</properties>
</persistence-unit>
Run Code Online (Sandbox Code Playgroud)
我在log4j2.xml中定义了这个:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG" verbose="true">
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%m%n" />
</Console>
<File name="MyFile" fileName="test.log">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
</File>
</Appenders>
<Loggers>
<logger name="org.hibernate.SQL" level="DEBUG" …Run Code Online (Sandbox Code Playgroud) 文件org.apache.logging.log4j.Logger说
/**
* Logs a message with parameters at the given level.
*
* @param level the logging level
* @param message the message to log; the format depends on the message factory.
* @param params parameters to the message.
* @see #getMessageFactory()
*/
void log(Level level, String message, Object... params);
Run Code Online (Sandbox Code Playgroud)
但:
更新:
请在答案中添加类名和XML元素名称.没有正确的搜索条件,很难在谷歌上找到关于Log4J 2.x的任何信息.
我正在尝试使用 log4j2(2.0.2) 和 10 个日志文件在 tomcat 7.0.23 中配置 RollingFile appender。
我在 filePattern 中使用 ${sys:catalina.base},它不起作用,日志文件放在 tomcat/bin/${sys:catalina.base}/ 目录中。
有趣的部分是第一个日志文件(没有数字)在 tomcat/logs 下创建正常 - 这意味着它成功地将文件名属性映射到真实路径。
当我用 filePattern="C:/apache-tomcat-7.0.23/logs/app.%i.log" 替换 ${sys:catalina.base} 时,它可以工作。
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="CONSOLE" target="SYSTEM_OUT">
<PatternLayout pattern="%d %-5p [%X{REQ_ID}] [%c{1}] %m%n"/>
</Console>
<RollingFile name="FILE" fileName="${sys:catalina.base}/logs/app.log"
filePattern="${sys:catalina.base}/logs/app.%i.log">
<PatternLayout pattern="%d %-5p [%X{REQ_ID}] [%c{1}] %m%n"/>
<Policies>
<SizeBasedTriggeringPolicy size="10 MB" />
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</Root>
</Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)
这意味着 filePattern 没有正确解释。
如何在不必静态指定日志目录的情况下克服这个问题?
谢谢您的帮助
我正在使用 log4j 2.0.2 进行日志记录。我试图将 ContextMapLookup 使用到 RollingFileAppender 的 fileName 和 filePattern 属性中,但我无法使其工作。
这是我在 REST 外观中的(简化的)Map 初始化:
@GET
public Response logSomething(@QueryParam("param") String param) {
ThreadContext.put("someName", "default");
LOGGER.info("Param from query: {}", param);
ThreadContext.clearMap();
return Response.ok().build();
}
Run Code Online (Sandbox Code Playgroud)
这是我的(简化的)配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n" />
</Console>
<RollingFile name="Rolling"
fileName="logs/${ctx:someName}-webapps-metrics.log"
filePattern="logs/archives/${ctx:someName}-webapps-metrics-%i.log" >
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %m%n"/>
<SizeBasedTriggeringPolicy size="5 KB"/>
</RollingFile>
</Appenders>
<Loggers>
<!-- My Logger using rollingFile -->
<Logger name="com.ipanematech.rest.MyRESTFacade" level="info" additivity="false">
<AppenderRef ref="Rolling" /> …Run Code Online (Sandbox Code Playgroud)