Skip to main content

I am trying to clear out the userver log files that are created by our system, by identifying where the errors are coming from and then fixing them in the source code (or programming around them, so testing for file existence before trying to load it, that kind of thing). 

What makes this difficult is not knowing which service has caused the error. In the past, I have looked at the help page for (e.g. 0160) and they (mostly) have code I can copy and paste for the error message and simply add (%%$componentname%%%) to the end of. 

I've looked in the help page for 0160, and it doesn't have this useful information. 

I have checked out the libmsg.usys.xml in uniface\\misc, and it doesn't appear to include this message. 

Am I missing an import file which includes the 0000-1000 (or other) messages? Or some way to get the definition so I can create my own message to get the needed diagnostic info? 


Also, if you are reading this, and you think it makes sense, please find my wish that userver can be configured to add the component name to the end/beginning of all these messages as a whole, to make diagnosis 1000% easier

, and give it a vote.... 


Iain 

I am trying to clear out the userver log files that are created by our system, by identifying where the errors are coming from and then fixing them in the source code (or programming around them, so testing for file existence before trying to load it, that kind of thing). 

What makes this difficult is not knowing which service has caused the error. In the past, I have looked at the help page for (e.g. 0160) and they (mostly) have code I can copy and paste for the error message and simply add (%%$componentname%%%) to the end of. 

I've looked in the help page for 0160, and it doesn't have this useful information. 

I have checked out the libmsg.usys.xml in uniface\\misc, and it doesn't appear to include this message. 

Am I missing an import file which includes the 0000-1000 (or other) messages? Or some way to get the definition so I can create my own message to get the needed diagnostic info? 


Also, if you are reading this, and you think it makes sense, please find my wish that userver can be configured to add the component name to the end/beginning of all these messages as a whole, to make diagnosis 1000% easier

, and give it a vote.... 


Iain 

Hi Iain,

here is something that makes it 1000% easier for you.

Messages can be found in common\\usys\\usys.uar

When Uniface raises these messages there is nothing to be found in the logfile.

You can change this by adding a %%CF_LOG("<MessageNumber>") to the end of the message.


returns string
params
string P_MSG : in
endparams
variables
string V_TEXT
string V_PROCERROR
string V_PROCERRORCONTEXT
string V_DATAERRORCONTEXT
string V_FORM
string V_ENT
string V_FELD
string V_WERT
endvariables
V_PROCERROR = $procerror
V_PROCERRORCONTEXT = $procerrorcontext
V_DATAERRORCONTEXT = $dataerrorcontext
V_FORM = "%%$formname / %%$componentname"
if ($procerror < 0)
V_FORM = "-FORM-"
endif
V_ENT = $entname
if ($procerror < 0)
V_ENT = "-ENT-"
endif
V_FELD = $fieldname
if ($procerror < 0)
V_FELD = "-FELD-"
V_WERT = "-WERT-"
else
V_WERT = @$fieldname
endif

V_TEXT = "%%$datim , %%P_MSG , %%$$ABTEILUNG , %%$$COMPUTERNAME, %%$processinfo("pid") , %%$$USER , %%V_FORM , %%V_ENT , %%V_FELD , %%V_WERT"
V_TEXT = "%%V_TEXT%%% , Error: %%V_PROCERROR occurred at %%V_PROCERRORCONTEXT , Context: %%V_DATAERRORCONTEXT"
V_TEXT = "%%V_TEXT%%^%%CF_CALLSTACK()"

filedump/append "%%V_TEXT%%^", "%%$$CLI_APPL_DIR%%%..\\EB\\LOG\\_Messages.log"
putmess V_TEXT
return ""
returns string
variables
string V_PROCSTACK
string V_SINGLEPOINT
string V_DATA
string V_OUTPUT
NUMERIC V_COUNTER
NUMERIC V_LINE
endvariables
V_PROCSTACK = $proccontext("STACK")
V_COUNTER = 3
getitem V_SINGLEPOINT, V_PROCSTACK, V_COUNTER
V_OUTPUT = ""
while($STATUS > 0)
if($item("MODNAM",V_SINGLEPOINT) != "APPL")
V_LINE = $item("LNR",V_SINGLEPOINT)
if($item("TYPE", V_SINGLEPOINT) = "MOD")
V_DATA = "%%$item("CPTNAM",V_SINGLEPOINT)%%% %%$item("MODNAM",V_SINGLEPOINT)%%% %%V_LINE%%% %%$item("LIN", V_SINGLEPOINT)%%%"
else
V_DATA = "%%$item("CPTNAM",V_SINGLEPOINT)%%% %%$item("MODNAM",V_SINGLEPOINT)%%% %%V_LINE%%% [%%$item("ENTITY",V_SINGLEPOINT)%%%.%%$item("FIELD",V_SINGLEPOINT)%%%] %%$item("LIN", V_SINGLEPOINT)%%%"
endif
V_OUTPUT = "%%V_OUTPUT%%V_DATA%%^"
endif
V_COUNTER += 1
getitem V_SINGLEPOINT, V_PROCSTACK, V_COUNTER
endwhile
return V_OUTPUT


This will add something like

16.02.2021 12:46:06 , 0160 , ARA , L1790147, 41492 , FRAM802L , TEST_U10_1 / TEST_U10_1 , ENT1 , BUTTON , Start , Error: 0 occurred at  , Context: 
TEST_U10_1   trigger DETAIL   4   [ENT1.BUTTON]   putmess $$GLOBAL_VAR

to the logfile.


Kind Regards

Norbert


I am trying to clear out the userver log files that are created by our system, by identifying where the errors are coming from and then fixing them in the source code (or programming around them, so testing for file existence before trying to load it, that kind of thing). 

What makes this difficult is not knowing which service has caused the error. In the past, I have looked at the help page for (e.g. 0160) and they (mostly) have code I can copy and paste for the error message and simply add (%%$componentname%%%) to the end of. 

I've looked in the help page for 0160, and it doesn't have this useful information. 

I have checked out the libmsg.usys.xml in uniface\\misc, and it doesn't appear to include this message. 

Am I missing an import file which includes the 0000-1000 (or other) messages? Or some way to get the definition so I can create my own message to get the needed diagnostic info? 


Also, if you are reading this, and you think it makes sense, please find my wish that userver can be configured to add the component name to the end/beginning of all these messages as a whole, to make diagnosis 1000% easier

, and give it a vote.... 


Iain 

I do like this, and will probably use it, primarily as an additional UAR that only uservers can see, so as not to confuse users. 

However, it does not address the original point, which is that I don't know what I should put in the message part of my replacement 0160 in order to get the original message back, with the additional stuff added. 

I can open the uar, and copy the .msg file out and look at it in a text editor, but that doesn't tell me what I should type in the message editor in order to get it to replace something with the global field name. 

Thanks for that above though, I wouldn't have thought of that on my own. 


Iain


I do like this, and will probably use it, primarily as an additional UAR that only uservers can see, so as not to confuse users. 

However, it does not address the original point, which is that I don't know what I should put in the message part of my replacement 0160 in order to get the original message back, with the additional stuff added. 

I can open the uar, and copy the .msg file out and look at it in a text editor, but that doesn't tell me what I should type in the message editor in order to get it to replace something with the global field name. 

Thanks for that above though, I wouldn't have thought of that on my own. 


Iain

The original message text looks like this:

0160 - Global variable %%$sub%%% not available.

I do like this, and will probably use it, primarily as an additional UAR that only uservers can see, so as not to confuse users. 

However, it does not address the original point, which is that I don't know what I should put in the message part of my replacement 0160 in order to get the original message back, with the additional stuff added. 

I can open the uar, and copy the .msg file out and look at it in a text editor, but that doesn't tell me what I should type in the message editor in order to get it to replace something with the global field name. 

Thanks for that above though, I wouldn't have thought of that on my own. 


Iain

Hi Iain,

sorry I forgot.

The message 0160 should look like 

0160 - Global variable %%$sub not available. %%CF_LOG("0160")


If you open a message with HEX-Editor you sometimes find HEX 01 D5 00 this should be "%%$sub".


Hope this helps.


Regards

Norbert