【发布时间】:2017-06-30 15:15:27
【问题描述】:
我正在运行一个 gradle 项目,并且我试图让 log4j 同时登录到控制台和文件。当错误被记录到控制台时,没有文件被记录到。我在 src/main/resources 中有我的 log4j.properties。我尝试将属性文件移动到 src 文件夹以及 SO 上建议的几乎每个文件夹,但均未成功。我也尝试过 log4j 中的 rollingFile 和 File 。 log4j.properties 文件有问题,还是我没有将文件放在正确的位置?
这是我当前的文件
log4j.properties
# root level configurations
log4j.rootLogger=INFO,console,rollingFile
# configuration for console outputs
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
# configuration for file output (into a file named messages.log)
log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender
log4j.appender.rollingFile.File=/home/cbolles/devel/testing/gradle_testing/messages.log
log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout
build.gradle
apply plugin: 'java'
repositories {
jcenter()
}
dependencies {
compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.8.2'
compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.8.2'
compile 'org.slf4j:slf4j-log4j12:1.7.18'
testCompile 'junit:junit:4.12'
}
task(runSimple, dependsOn: 'classes', type: JavaExec) {
main = 'com.bolles.ErrorTester'
classpath = sourceSets.main.runtimeClasspath
args 'mrhaki'
systemProperty 'simple.message', 'Hello '
}
defaultTasks 'runSimple'
LogTesting.java
package com.bolles;
import java.io.PrintWriter;
import java.io.StringWriter;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class LogTesting
{
private static final Logger log = LogManager.getLogger(LogTesting.class);
public static void reportError(Exception e, boolean consoleLog)
{
String errorMessage = "";
if(e.getMessage() != null)
{
errorMessage = e.getMessage();
}
StringWriter stackTraceWriter = new StringWriter();
e.printStackTrace( new PrintWriter(stackTraceWriter));
String stackTrace = stackTraceWriter.toString();
log.error(errorMessage);
log.log(Level.ERROR, errorMessage + "\n" + stackTrace);
}
}
ErrorTester.java
package com.bolles;
public class ErrorTester
{
public static void nullStringTest()
{
String errorString = null;
try
{
System.out.print(errorString);
}
catch(Exception e)
{
LogTesting.reportError(e, true);
}
}
public static void main(String[] args)
{
nullStringTest();
}
}
其他答案似乎都不适用于我的问题。
【问题讨论】: