Java log4j 2-配置问题
我正在尝试将log4j2.0配置为报告日志 我的配置保存为log4j2.xml,这是它的内容:Java log4j 2-配置问题,java,log4j2,Java,Log4j2,我正在尝试将log4j2.0配置为报告日志 我的配置保存为log4j2.xml,这是它的内容: <?xml version="1.0" encoding="UTF-8"?> <configuration name="PRODUCTION" status="OFF"> <appenders> <RollingFile name="MyFileAppender" fileName="../Logs/
<?xml version="1.0" encoding="UTF-8"?>
<configuration name="PRODUCTION" status="OFF">
<appenders>
<RollingFile name="MyFileAppender"
fileName="../Logs/app.log"
filePattern="../Logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout>
<pattern>%d %p %C{1.} [%t] %m%n</pattern>
</PatternLayout>
<Policies>
<OnStartupTriggeringPolicy />
<TimeBasedTriggeringPolicy interval="6" modulate="true"/>
<SizeBasedTriggeringPolicy size="250 MB"/>
</Policies>
</RollingFile>
</appenders>
<loggers>
<root level="trace">
<appender-ref ref="MyFileAppender"/>
</root>
</loggers>
</configuration>
没有写入任何内容,也没有创建任何文件。
当我调试代码时,我看到记录器是默认记录器(控制台)。我非常确定,您必须写下要记录其消息的类的完整限定名,比如
com.application.log4jtest.YourClass
。如果这不起作用,试着调整日志级别
而且——就像通知一样——你也可以写
Logger logger = LogManager.getLogger(MyClass.class); // omit .getClass()
您应该将log4j2.xml放入类路径中 或者将“log4j.configurationFile”系统属性设置为强制使用log4j2.xml 请参阅: 它存在于项目的类路径中,我试着把它放进去 许多其他目录 具体在哪里?关于“在类路径中”的含义,人们常常感到困惑。它不可能在任何地方。它必须位于“顶部”或“默认包”
src
├── main
│ └── java
│ ├── com
│ │ └── example
│ └── log4j2.xml
好的,我解决了这个问题。
我必须在xml中指定package=“myPackage”我也有类似的问题。我把文件放在src文件夹下,它工作了。我在log4j2.xml文件中没有提到任何包名。在log4j2的文档中: “如果无法找到JSON文件,XML ConfigurationFactory将尝试在类路径上找到log4j2.XML。” 但它不适用于类路径。相反,如果我们把它保存在src文件夹中,那么它就工作了
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>log4j2.xml</param-value>
</context-param>
Log4J配置
log4j2.xml
这里提到了类似的问题:给eclipse用户的提示: 右键单击项目并单击“刷新”。确保可以在eclipse中看到log4j2.xml文件。 (这解决了我的问题。) 详细地说:
- 您不应该将文件添加到构建路径。(如果添加,eclipse将对此发出警告)
- 此文件的名称未出现在“.classpath”文件中
- 我将log4j2.xml放在src/目录下。它起作用了
- 我遇到了问题,我尝试了一些解决方案,但只有这一点对我有效:
转到web.xml,并添加此参数:
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>log4j2.xml</param-value>
</context-param>
Log4J配置
log4j2.xml
实际上,这是一个简单的过程。Log4j 2的两个主要类如下所示,您需要这样导入:
import org.apache.logging.log4j.LogManager
import org.apache.logging.log4j.Logger
现在使用此代码获取一个记录器
实例
private static final Logger logger = LogManager.getLogger();
注意,我没有将getLogger()
方法的类名指定为参数。log4j2会自动计算出来
现在,您可以使用记录器
类中的info()、trace()、debug()、warn()、error()、fatal()
方法。但是要从所有这些方法中获得输出,您需要一个XML配置文件。默认情况下,Log4j 2仅从error()和fatal()方法生成输出
配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<File name="MyCustomLogFile" fileName="/home/me/mylogfile.log">
<PatternLayout>
<Pattern>%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n</Pattern>
</PatternLayout>
</File>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="all">
<AppenderRef ref="MyCustomLogFile"/>
<!--<AppenderRef ref="Console"/>-->
</Root>
</Loggers>
</Configuration>
java -Dlog4j.configurationFile=/path/to/xml/configuration/file/Log4j2.xml MyMainClass
你做到了。将立即在您的控制台上进行日志记录
特别注意事项:
- 在XML文件中,我提供了两个附件:一个文件和一个控制台。您可以看到,只需取消注释已注释的
AppenderRef
标记,即可在文件中而不是控制台中获得输出
- 还可以将环境变量作为系统属性提供。Log4j 2将首先从环境变量读取配置文件,如果未找到环境变量,则在
-D
参数中读取配置文件
享受日志记录的乐趣。:-) 我也面临同样的问题。我将log4j2.xml文件保存在系统环境变量中
变量名称:sys\u logroot变量值:D:\user\gouse
没有为我创建日志
使用系统变量-Dlog4j.configurationFile=path/to/log4j2.xml
这解决了我的问题将log4j2.xml
文件放在src/main/resources
下。它可以工作我有相同的“错误状态记录器未找到log4j2配置文件”。使用默认配置:仅将错误记录到控制台。消息反复出现。这让我发疯了。log4j2.xml文件正确地放置在src/main/resources中,就像我以前在数千个项目中所做的那样
在我的例子中,解决方案是从根pom.xml中删除pom。打包pom会导致src/main/resources的内容不会复制到target/classes
对于具有相同根本原因的所有人来说,日志记录都很愉快。Hi,我使用的是netbeans,类路径如下:ProjectName\build\classes\ProjectName\log4j2.xml日志xml位于所有其他.class文件的目录中。我可以看到它是类路径,因为它写在项目属性中:-build.classes.dir=${build.dir}/classes在标准maven模块设置中为我工作,谢谢。@我的eclipse项目中的wolfcastle log4j2.xml文件在src文件夹下,但是log4j仍然无法检测到它。有什么建议吗?试过了…还是没什么。它必须与类路径有关……但我不知道是什么。是的,我读过,我确实把它放在了那里(至少我认为是这样)。请阅读我写给沃尔夫堡的评论。谢天谢地,这两条规则在很多(简单)情况下都是不够的。您是说包
作为配置
根元素的属性吗?像这样
这是否添加了其他9个答案中未包含的内容?是的,这给出了放置log4j2.xml文件的确切位置。我将log4j2.xml放在src/目录下。它起作用了。非常感谢。
java -Dlog4j.configurationFile=/path/to/xml/configuration/file/Log4j2.xml MyMainClass