英文:
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
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。
这是我的项目结构:
更新后的 LoggerHelper 类:
为了测试 LoggerHelper 是否工作,我添加了一个带有主方法的 Test 类:
控制台:
生成的日志文件。
英文:
I found the issue.
The problem was that you didn't use the LoggerHelper.
This is my project structure :
Updated LoggerHelper class :
To test whether LoggerHelper is working or not. I added one Test class with main method :
Console :
The log generated file.
答案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'
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论