I need your assistance to solving the situation which is important for my project. I need to modify the logfiles which I know generated automatically. I just need to add some field in the perflog/web_api_details.csv file.
How shall I do this? Is there a way to manipulate log4jconfig.xml in Appian cloud environment to capture additional information in perflog/web_api_details .csv file.
Please suggest. Thanks in Advance.
Discussion posts and replies are publicly visible
I don't think this is possible. Some logs can be updated to change the logging level but I'm not aware of a way to add additional columns to any logs. What is your use case?
Thanks for your quick response Peter.
We are trying track unique identifier for individual api call. When the api call made need to add the unique reference number for each api call in web_api_details.csv file and need track on database also.
Can you explain why you need that information? What are you hoping to do with the unique reference for each API call? If you talk a bit more about what your end goal is, there might be another way to get what you need.
Also, keep in mind that this log does not track individal requests; it summarizes all of the requests to the same API within an hour into a single row in the log.
Thank you for your information Peter.
Could you please tell me which logfile capture the information for those external api called by appian application.
Please find details of our use case below.
1) Intention behind tracking APIs using Unique reference number is to track their performance by collecting metrics from perf logs .csv files. These are APIs that are external to Appian but are called by Appian applications.
2) We understood that tracking at individual API call instance level is not possible and we are fine with tracking data grouped by (aggregated by) by Endpoint Name.
Our questions are below:
1) Which .csv file captures information related to APIs that are external to Appian but are called by Appian applications within perflogs folder?
2) If it is Integration_Details.csv file, we don't see Endpoint Name as a column in it unlike in Web_API_Details.csv file. Is it possible to add this additional column "Endpoint Name" in Integration_Details.csv file similar to the column in Web_API_Details.csv?
Please let us know the possibilities with Appian. This will help us collect metrics effectively at endpoint level. At this point, we are not looking at collecting metrics at individual API call instance level.
Thanks for the additional details - this use case makes sense! For your questions:
1) You definitely want to use the integration_details.csv logs. This log is for requests made from Appian, while the web API logs are for requests made to Appian.
2) It isn't possible to add the endpoint for the request because integrations work differently than web APIs. Web APIs have a fixed endpoint in Appian while the integration call can use a dynamic endpoint (the endpoint itself accepts an expression that gets evaluated at run time).
I think your best bet is to use the Integration UUID column. This column refers to the design object in Appian that performs the integration. If you group your calls by UUID, then you can find the corresponding design object and determine which endpoint it is using. It's a bit more tedious, but it should still get you the information you need.
To find the corresponding design object given that UUID, you can do an expression search to find the correct objects.
Thanks for your response. This really helps. In that case, can we create a DB table in our Appian application where I can persist the pair i.e. Integration UUID and its associated Endpoint name at the time in the Appian application where the integration object is called? Also, would this additional step of persisting these data have any performance impact on Appian application?
Yeah you should be able to persist that data in the database (and I wouldn't think it would have any impact on performance). The only downside is it may not be that easy to get the UUIDs for all of your integrations - there isn't necessarily a bulk export of the UUIDs, so you might need to either view them manually or export all of the integrations and do some kind of parsing from the export log.
Thanks again for your quick response. Below is not too clear for us in your above response.
"The only downside is it may not be that easy to get the UUIDs for all of your integrations - there isn't necessarily a bulk export of the UUIDs, so you might need to either view them manually or export all of the integrations and do some kind of parsing from the export log."
So do you mean when an Appian application makes an API call, it is not guaranteed that we can get the associated UUID and with that the associated endpoint name every time for us to persist them in our DB table? If so, can you please explain how do we make it consistent using exported file containing integration objects you mentioned about? We can surely parse the exported file but still we need the mapping information around the integration objects and real time API calls. So requesting for some insights on this.
Sorry, I don't think my repsonse was very clear. The issue isn't with the logging - the logging will work great and will always return the correct UUID. The problem is then trying to figure out which integration is related to that UUID. That's the procedure that is pretty much entirely manual.
Likely what you will need to do is to go to each integration in your design environment and export all of them. The export log contains the UUID and the name of each integration that you can get from the export Then, manually create a table that includes the UUID and a description of the integration. If you have a large number of integrations, this may take a while. Once you have this table, then you can match them up with your log.
Thanks a lot Peter. Your responses have given as a lot of insights and clarity for our development. Appreciate it. We will design the system based on your guidance.
© 2021 Appian. All rights reserved.