Come for the products,
stay for the community

The Atlassian Community can help you and your team get more value out of Atlassian products and practices.

Atlassian Community about banner
4,365,175
Community Members
 
Community Events
168
Community Groups

log object property not find when used in a class

Dear all,

I have a class object define in a groovy file named NewUser as below :

import org.apache.log4j.Logger
import org.apache.log4j.Level

class NewUser{

NewUser(Issue issue, boolean Prod)
{
    log.setLevel(Level.DEBUG)
}

}

I need to record different log information from that class but when setting the log.SetLevel, I get an error saying :

No such property: log for class: ServiceRequest.NewUser

Any idea why it cannot find the log property ?

regards

2 answers

Hello @Mathis Hellensberg , I find out the issue.

The way you describe to initiate the Log object creation is only available for use in InLine script.

In my case my class is define in a script file and the way to initiate the log creation is to decorate the class with the syntax  @Log4j and the log objects gets available globally

regards

serge

Nice, the more you know :)

Hi @serge calderara 

This should work:

import org.apache.log4j.Logger
import org.apache.log4j.Level

class NewUser{

NewUser(Issue issue, boolean Prod) {

def log = Logger.getLogger(NewUser.class)
log.setLevel(Level.DEBUG)
log.debug("hello world!")

}

}

hi @Mathis Hellensberg , it does not work.

I have a red cross saying unexpected token :-( at the time I enter the line :

log.setLevel(Level.DEBUG)

Hmm I tested that this worked for me (Jira 8.6.1):

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.Issue
import org.apache.log4j.Logger
import org.apache.log4j.Level

def issueManager = ComponentAccessor.issueManager
def issue = issueManager.getIssueObject("SD-47")

class NewUser {

NewUser(Issue issue, boolean Prod) {

def log = Logger.getLogger(NewUser.class)
log.setLevel(Level.DEBUG)
log.debug("hello world!")

}
}

def test = new NewUser(issue, false)
log.info(test) 

 Do you have anything else in your script? Where are you using the script? Is it a post-function, a listener or?

I get the following exception when the script run :

groovy.lang.MissingPropertyException: No such property: log for class: ServiceRequest.NewUser at ServiceRequest.NewUser.InviteUser(NewUser.groovy:163) at ServiceRequest.NewUser$InviteUser.call(Unknown Source) at Script42.run(Script42.groovy:88)

My newUser class instance creation is done from the InLine script area of a post-function in a worflow .

here is the content of the class :

package ServiceRequest
import MsGraphApi.Helper

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.comments.CommentManager

import groovy.json.*
import groovyx.net.*
import groovyx.net.http.*
import static groovy.json.JsonOutput.*
import static groovyx.net.http.ContentType.*
import static groovyx.net.http.Method.*

import org.apache.log4j.Logger
import org.apache.log4j.Level

class NewUser{

Helper apiHelper
Issue refIssue

//Field defienition constant to be read from issue
String emailFieldName="Email Address" //10523
String FnameFieldName="First Name"
String LnameFieldName="Last Name"
String AgencyFieldName="Agency"

String emailFieldValue=""
String agencyFieldValue=""
String FnameFieldValue=""
String LnameFieldValue=""

String GroupId_Member_To_Add

CommentManager commentMgr=ComponentAccessor.getCommentManager()



NewUser(Issue issue, boolean Prod)
{

def log = Logger.getLogger(NewUser.class)
log.setLevel(Level.DEBUG)

apiHelper=new Helper(Prod,"RLX-DIGITAL")

refIssue=issue
def customFieldMgr=ComponentAccessor.getCustomFieldManager()

def emailField =customFieldMgr.getCustomFieldObjects().findByName(emailFieldName)
emailFieldValue=refIssue.getCustomFieldValue(emailField)


def FnameField =customFieldMgr.getCustomFieldObjects().findByName(FnameFieldName)
FnameFieldValue=refIssue.getCustomFieldValue(FnameField)

def LnameField =customFieldMgr.getCustomFieldObjects().findByName(LnameFieldName)
LnameFieldValue=refIssue.getCustomFieldValue(LnameField)

def AgencyField =customFieldMgr.getCustomFieldObjects().findByName(AgencyFieldName)
agencyFieldValue=refIssue.getCustomFieldValue(AgencyField)

if (Prod) //If we are in Prodution we get group ID as expected
GetGroupId(agencyFieldValue)
else // Not in prod we test it agains a Test AD account
GroupId_Member_To_Add= GRP_TEST_AGENCY_ITECOR_ID


}

// Main field property return methods
public String GetToken(){return apiHelper.Token}
public String GetEmailValue(){return emailFieldValue}
public String GetFirstNameValue(){return FnameFieldValue}
public String GeLastNameValue(){return LnameFieldValue}
public String GeLAgencyValue(){return agencyFieldValue}
public String GetGroupId(){return GroupId_Member_To_Add}


/*============================================================
Method: MapGroupFromAgency
Identifiy groups ID to which user need to be added
============================================================*/
String GetGroupId(String Agency){

.......

}


/*============================================================
Method: InviteUser
Send invitation to user for joining group
============================================================*/
public boolean InviteUser(){

boolean userInvited=true
boolean userAddedtoGrp=false
boolean userCreated=false

// get user id
String userId= apiHelper.inviteUser(apiHelper.Token,emailFieldValue,FnameFieldValue,LnameFieldValue)

if (userId == null || userId.trim().isEmpty()) {
log.error("ITECOR SCRIPT : User failure to be added as guest in active directory [$emailFieldValue]")

}
else
{
userCreated=true

log.debug("ITECOR SCRIPT : User to invite : " + emailFieldValue)
log.debug("ITECOR SCRIPT : User ID to invite created : " + userId)
log.debug("ITECOR SCRIPT : ISSUE STATUS : " + refIssue.status.name)

// add user to group sample
userAddedtoGrp=apiHelper.addUserToGroup(apiHelper.Token,userId,GroupId_Member_To_Add)

//log.debug("ITECOR SCRIPT : User added to group : " + userAddedtoGrp.toString())

if (userAddedtoGrp){
def reportMsg="""
*Default application access request *\n\n
Dear [~${refIssue.reporter.getName()}], Your request has been assigned to our Team.\n
*Status :* Pending for invitation approvment.\n
An invitation email has been sent to user *$emailFieldValue*\n
Thanks to let us know when *$FnameFieldValue* *$LnameFieldValue* has access to requested application
\n Regards\n Service Desk Team"""

commentMgr.create(refIssue,refIssue.getAssignee(),reportMsg,true)

}
else{
log.debug("ITECOR SCRIPT : Failed adding user to group")

}
}

if (userAddedtoGrp && userInvited)
{
log.debug("ITECOR SCRIPT : User onboarding succesfully completed : " )
userInvited=true
}
else
{
userInvited=false
log.debug("ITECOR SCRIPT : User onboarding NOT completed [userId: $userCreated, [AddToGroup : $userAddedtoGrp] " )

}
userInvited
}
}

 

The exception is raised at the execution of the first log entry find in the InviteUser method . Seems that the log object is not visible inside a Method of the class which need to use it.

Thanks for help

regards

Hmm this error "ServiceRequest.NewUser$InviteUser.call(Unknown Source) at Script42.run(Script42.groovy:88)" is beacuse you just have "........" at line 88.

Can you fix that and post the new error?

No the ..... at line 88 is because I have removed some sensitive data before posting the code in this forum..

Seems to me that the log object is not visible inside the method

any idea ?

Suggest an answer

Log in or Sign up to answer
TAGS

Atlassian Community Events