小编Rem*_*pma的帖子

使用log4j2时,日志文件为空

我在我的项目中使用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)

它创建了我的文件,我记录了它,但它仍然是空的.当我尝试删除此文件时,操作系统告诉我它正在使用(如果应用程序当前正在工作),但即使我停止应用程序,文件仍然是空的.

那么我应该更改哪些设置才能使其正常工作?

java configuration logging log4j log4j2

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

log4j2多个appender,config.xml中的多个记录器

我正在尝试设置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)

java configuration logging log4j log4j2

6
推荐指数
1
解决办法
4万
查看次数

包属性未检测到Log4j2(2.1)自定义插件

我已将我的log4j2自定义插件打包到一个单独的jar(仅包含插件类)中,并将其放在应用程序类路径中.但它没有被发现.

我用谷歌搜索发现它是一个错误 - 不再使用"packages"参数.还有一些链接提供了一些替代方案,其中maven pom.xml和log4j2插件dat文件在上下文中.问题是我不熟悉maven,也不知道如何生成dat文件.我只知道它包含在log4j-2.1-core.jar中,其中现有的log4j2插件在pom.xml中定义.

有人可以建议我如何使我的自定义插件工作?

我经历了这个 - Log4j2自定义插件 - 使用Maven Assembly Plugin进行注释处理

但目前尚不清楚.我正在关注解决方案但不确定如何为自定义插件创建插件dat文件或者我需要在哪里进行更改...

java logging log4j log4j2

6
推荐指数
1
解决办法
3247
查看次数

Log4j - 有时只需要换行符

通过 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 中可能吗?

java logging log4j newline log4j2

5
推荐指数
1
解决办法
5722
查看次数

如何在运行时更改log4j2的配置文件?

我想在运行时在log4j2中关闭我的调试语句.根据文档,我们可以做到这一点.我将我的log4j.xml文件保存在默认包中,然后将jar放在其中.因为我无法使用Dlog4j.configuration =/path/to/log4j.xml修改jar我指定的xml文件.但是,这不起作用.我使用file:// uri尝试了所有组合的所有内容,但仍然没有选择xml.

java configuration logging log4j log4j2

5
推荐指数
1
解决办法
5215
查看次数

Log4j2:动态创建多个日志的日志文件

我目前正在创建一个可以拥有模块的系统(将它们视为插件),其中每个模块都可以拥有自己的专用日志.

我想使用log4j2项目进行日志记录,但我似乎对文件appender有些麻烦.

主项目(模块加载器和整个事物的"核心")应该有自己的日志文件,而模块应该有自己的(如mod_XXXXXXXX.log).

通过阅读有关appender的文档,我发现了这个FileAppender类,我打算使用它.直到我发现我不能简单地将appender添加到由创建的默认记录器LogManager.getLog().

LogManager返回的记录器是与Logger接口不同的记录器.

甚至搜索都没有给我任何近乎解决方案,我发现只是xml配置中的预定义文件日志 - 这不是我想要的.

谢谢你的阅读; 即使是最轻微的线索也欢迎:)

java logging log4j log4j2

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

Hibernate 4.3显示SQL参数

我正在使用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)

java logging hibernate slf4j log4j2

5
推荐指数
1
解决办法
4370
查看次数

Log4J的默认MessageFactory是什么

文件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)

但:

  1. 当我设置任何时,使用哪个MessageFactory?
  2. 哪种消息格式使用默认工厂?
  3. 如果默认工厂无法满足我的需求,我该如何设置自己的工厂?

更新:

请在答案中添加类名和XML元素名称.没有正确的搜索条件,很难在谷歌上找到关于Log4J 2.x的任何信息.

java logging log4j log4j2

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

Log4j2:RollingFile appender 中的 filePattern 的属性替换工作不正确

我正在尝试使用 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 没有正确解释。

如何在不必静态指定日志目录的情况下克服这个问题?

谢谢您的帮助

java logging rollingfileappender tomcat7 log4j2

5
推荐指数
1
解决办法
1851
查看次数

Log4j 2:无法在 RollingFileAppender fileName 和 filePattern 中使用 ContextMapLookup

我正在使用 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)

java configuration logging rollingfileappender log4j2

5
推荐指数
1
解决办法
1874
查看次数