无法通过Gradle使用log4j将日志写入日志文件。

huangapple go评论81阅读模式
英文:

unable to write the logs to log file using log4j through Gradle

问题

我正在进行Cucumber TestNG Gradle自动化项目的工作。由于我对Gradle不熟悉,虽然我已经在build.gradle文件中添加了适当的log4j依赖项,但仍然无法解决问题。有人可以查看一下这个问题,并提供解决方案,或者指导我出了什么问题,导致日志没有写入名为"ApplicationLogs.log"的日志文件。

**以下是我的项目结构**

**以下是我的Log4j.properties文件内容**

# 根日志记录器选项
log4j.rootLogger=INFO, RFILE, STDOUT

# 控制台Appender
log4j.appender.name=STDOUT
log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
log4j.appender.STDOUT.Target=System.out
log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout 
log4j.appender.STDOUT.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p] [%c{1}] - [%M] %m%n

# 滚动文件Appender
log4j.appender.name=RFILE
log4j.appender.RFILE=org.apache.log4j.RollingFileAppender
log4j.appender.RFILE.File=./Automation_Report/logs/ApplicationLogs.log
log4j.appender.RFILE.threshold=INFO
log4j.appender.RFILE.maxFileSize=25MB
log4j.appender.RFILE.maxBackupIndex=100
log4j.appender.RFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.RFILE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p] [%c{1}] - [%M] %m%n

**以下是我的build.gradle文件内容**

plugins {
    id 'java'
    id 'maven-publish'
    id 'java-library'
    id 'java-gradle-plugin'
    id 'application'
}

apply plugin: 'java'

repositories {
    mavenCentral()
    jcenter()
}

task deleteGraphicsAssets(type: Delete) {
    delete "build"
}

version '1.0-SNAPSHOT'
sourceCompatibility = 1.8

dependencies {
    // ... (依赖项列表,已省略)
}

test {
    testLogging.showStandardStreams = true
    systemProperties System.getProperties()
}

configurations {
    cucumberRuntime.extendsFrom testImplementation
}

task cucumber() {
    // ... Cucumber任务设置,已省略)
}

tasks.test {
    finalizedBy cucumber
}
英文:

I am working on Cucumber TestNg Gradle automation project. As I am new to Gradle and not able to figure the issue though I have put in appropriate log4j dependencies in build.gradle file. Can somebody look into this issue and provide the solutions or advise me on what went wrong due to which logs are not written to log file called "ApplicationLogs.log"

Below is my project structure

无法通过Gradle使用log4j将日志写入日志文件。

Below is my Log4j.properties file contents

Root logger option

    log4j.rootLogger=INFO, RFILE,STDOUT
# Console Appender
log4j.appender.name=STDOUT
log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
log4j.appender.STDOUT.Target=System.out
log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout 
log4j.appender.STDOUT.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p] [%c{1}] - [%M] %m%n
# Rolling File Appender
log4j.appender.name=RFILE
log4j.appender.RFILE=org.apache.log4j.RollingFileAppender
log4j.appender.RFILE.File=./Automation_Report/logs/ApplicationLogs.log
log4j.appender.RFILE.threshold=INFO
log4j.appender.RFILE.maxFileSize=25MB
log4j.appender.RFILE.maxBackupIndex=100
log4j.appender.RFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.RFILE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p] [%c{1}] - [%M] %m%n

Below is my build.gradle File Contents

plugins {
id 'java'
id 'maven-publish'
id 'java-library'
id 'java-gradle-plugin'
id 'application'
}
apply plugin: 'java'
repositories {
mavenCentral()
jcenter()
}
task deleteGraphicsAssets(type: Delete) {
delete "build"
}
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
dependencies {
// This dependency is exported to consumers, that is to say found on their compile classpath.
api 'org.apache.commons:commons-math3:3.6.1'
// This dependency is used internally, and not exposed to consumers on their own compile classpath.
implementation 'com.google.guava:guava:28.2-jre'
implementation gradleApi()
//Cucumber
testImplementation  'io.cucumber:cucumber-java:4.8.0'
//compile group: 'io.cucumber', name: 'cucumber-jvm', version: '4.8.0', ext: 'pom'
testImplementation  'io.cucumber:cucumber-jvm:4.8.0'
compile group: 'io.cucumber', name: 'cucumber-core', version: '4.8.0'
// testImplementation  'io.cucumber:cucumber-core:4.8.0'
compile group: 'io.cucumber', name: 'cucumber-testng', version: '4.8.0'
//testImplementation  'io.cucumber:cucumber-testng:4.8.0'
implementation  'io.cucumber:cucumber-picocontainer:4.7.4'
testImplementation  'io.cucumber:cucumber-gherkin:5.1.0'
//TestNg
// testImplementation 'org.testng:testng:6.14.3'
testCompile group: 'org.testng', name: 'testng', version: '6.14.3'
//Reports
testImplementation  'com.aventstack:extentreports:4.1.7'
testImplementation  'com.aventstack:extentreports-cucumber4-adapter:1.0.12'
//Maven Compiler , Surefire Plugin ,Poi
testImplementation  'org.apache.maven.plugins:maven-surefire-plugin:2.22.2'
testImplementation  'org.apache.maven.plugins:maven-compiler-plugin:3.8.1' 
testImplementation 'org.apache.poi:poi-ooxml:4.1.2'
//Log4j & SLF4J
compile group: 'log4j', name: 'log4j', version: '1.2.17'
// #Rest Assured Apis
testImplementation 'io.rest-assured:rest-assured:3.3.0'
testImplementation 'org.json:json:20180813'
testImplementation 'com.googlecode.json-simple:json-simple:1.1.1'
//#Selenium Apis
compile group: 'org.seleniumhq.selenium', name: 'selenium-server', version: '3.141.59'
implementation 'com.paulhammant:ngwebdriver:1.1.4'
compile group: 'org.seleniumhq.selenium', name: 'selenium-htmlunit-driver', version: '2.52.0'
implementation 'org.seleniumhq.selenium:selenium-java:4.0.0-alpha-4'
//testImplementation 'org.hamcrest:hamcrest-all:2.2'
}
test {
testLogging.showStandardStreams = true
systemProperties System.getProperties()
}
configurations {
cucumberRuntime.extendsFrom testImplementation
}
task cucumber() {
dependsOn assemble,testClasses
doLast {
javaexec {
main = "io.cucumber.core.cli.Main"
classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output
args = ['--plugin', 'pretty', 
'--plugin', 'json:target/AppleBrands.json', 
'--plugin',  'com.aventstack.extentreports.cucumber.adapter.ExtentCucumberAdapter:Report',
'--glue','com.apple.brands.test.stepdefinition',
'src/test/resources','src/main/java',
'--tags', '@Api'         
]
}
}
}
tasks.test {
finalizedBy cucumber
}

答案1

得分: 0

我找到了问题。

问题是你没有使用 LoggerHelper。

这是我的项目结构:

无法通过Gradle使用log4j将日志写入日志文件。

更新后的 LoggerHelper 类:

无法通过Gradle使用log4j将日志写入日志文件。

为了测试 LoggerHelper 是否工作,我添加了一个带有主方法的 Test 类:

无法通过Gradle使用log4j将日志写入日志文件。

控制台:

无法通过Gradle使用log4j将日志写入日志文件。

生成的日志文件。

无法通过Gradle使用log4j将日志写入日志文件。

英文:

I found the issue.

The problem was that you didn't use the LoggerHelper.

This is my project structure :

无法通过Gradle使用log4j将日志写入日志文件。

Updated LoggerHelper class :

无法通过Gradle使用log4j将日志写入日志文件。

To test whether LoggerHelper is working or not. I added one Test class with main method :

无法通过Gradle使用log4j将日志写入日志文件。

Console :

无法通过Gradle使用log4j将日志写入日志文件。

The log generated file.

无法通过Gradle使用log4j将日志写入日志文件。

答案2

得分: 0

经过大量的分析和比较,我找到了解决我的问题的方法。解决方案非常简单,只需要移除不需要的插件,这些插件导致了所有的问题。

当我像下面的插件部分所示移除了应用程序插件,它开始正常工作,甚至日志也开始正常工作。

plugins {
        id 'java'
        id 'maven-publish'
        id 'java-library'
        id 'java-gradle-plugin'
    }
英文:

After doing lot of analysis and comparing i found the solution to my question. The solution is very simple only mistake that i need to remove the unwanted plugins used due to which it created all of issues.

When I removed the application plugin as shown below in plugin section it started working properly and even logs started working.

plugins {
id 'java'
id 'maven-publish'
id 'java-library'
id 'java-gradle-plugin'
}

huangapple
  • 本文由 发表于 2020年9月7日 21:53:45
  • 转载请务必保留本文链接:https://go.coder-hub.com/63778957.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定