tomcat - 在运行时定义 log4j 文件位置

标签 tomcat logging log4j localhost

我想将 log4j 的位置定义为 ${catalina.base}/logs/mylog/logdate.log

但我想在运行时做

这是我在运行时定义 fileappender 的代码 如果我离线运行它,我会在项目中得到一个新文件夹,所有日志都放在那里,这很棒 但是当我在服务器上运行项目时,我找不到日志.......

如何在运行时在本地主机上定义日志的位置?

String targetLog = "${catalina.base}/logs/ElectronicArena/ea.log";

ConsoleAppender console = new ConsoleAppender(); // create appender
// configure the appender
String PATTERN = "%d %-5p [%c{1}] %m%n";
console.setLayout(new PatternLayout(PATTERN));
console.setThreshold(Level.INFO);
console.activateOptions();
// add appender to any Logger (here is root)
Logger.getRootLogger().addAppender(console);
FileAppender appender = null;
try {
    appender = new FileAppender(new PatternLayout(
            "%d %-5p [%c{1}] %m%n"), targetLog, true);
    appender.setName(TAG);
    appender.setLayout(new PatternLayout("%d %-5p [%c{1}] %m%n"));
    appender.setFile(targetLog);
    appender.setAppend(true);
    appender.setThreshold(Level.INFO);
    appender.activateOptions();
    Logger.getRootLogger().addAppender(appender);

} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

编辑 由于某种原因,声明式不起作用: 这是我的属性文件

log4j.rootLogger=INFO, Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d %5p [%t](%c:%L) - %m%n

log4j.rootLogger=DEBUG, Log

log4j.appender.Log=org.apache.log4j.FileAppender
log4j.appender.Log.layout=org.apache.log4j.PatternLayout

log4j.appender.Log = org.apache.log4j.DailyRollingFileAppender
log4j.additivity = false
log4j.appender.Log.File=${catalina.base}/logs/ElectronicArena/ea.log
log4j.appender.Log.MaxFileSize = 5MB
log4j.appender.Log.MaxBackupIndex = 20
# Pattern to output the caller's file name and line number.
log4j.appender.Log.layout.ConversionPattern=%d %5p [%t](%c:%L) - %m%n

最佳答案

尝试替换这一行:

String targetLog = "${catalina.base}/logs/ElectronicArena/ea.log";

通过这个:

String targetLog = System.getProperty("catalina.base")  + "/logs/ElectronicArena/ea.log";

关于tomcat - 在运行时定义 log4j 文件位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18410247/

相关文章:

tomcat - 配置 - TomCat 上的锁定调用/线程 - 供应商说重启

java - 尽管 PATH 正确,但示例中的 Tomcat servlet、jsp 页面无法呈现?

java - 为 Java Logger 优化磁盘写入

python - 仅在作为脚本运行时打印?

java - 从 log4j 日志中提取数据的正则表达式模式是什么?

jakarta-ee - servlet : "FileNotFoundException: log4j.properties"中log4j的配置

java - Tomcat 7.0.12 上 "Error deploying configuration descriptor"的原因

Java 错误页面配置

tomcat - 为什么 Log4j2 JsonLayout + KeyValuePair 打印空的 logEvent 消息

java - 在应用程序中使用 log4j 嵌入 osgi felix 而 bundle 使用 log4j 时出现 ClassCastException