Hi there.
We have identified an inconsistency in the audit logs page (/audit-logs
), where the time shown in the log entries is always fixed to the value saved in the database (UTC), so any time zone setting is ignored in this page (host time zone or user account time zone setting).
This does not happen in the security logs (/Account/SecurityLogs
) where I can verify that it correctly displays the time based on the time zone setting.
Is this intended or a bug?
For added context, we are currently using the following settings related to the time zone:
Npgsql.EnableLegacyTimestampBehavior
enabled, since we are using PostgreSQL (as instructed here).AbpClockOptions.Kind
set toDateTimeKind.Utc
(as instructed here).
Should both of these settings be used at the same time? I just want to ensure we are configuring time zones correctly in the application.
9 Answer(s)
-
0
Hi,
Thanks for reporting, It s working exctly what you described, we made an enhancement on TimeZones in ABP applications at v9.2.0 You can check this @maliming's article: https://abp.io/community/articles/developing-a-multitimezone-application-using-the-abp-framework-zk7fnrdq
This probably applies the logic what you need
-
0
Hi,
I see that there were a bunch of changes related to time zones in 9.2.0, so I updated to it to test and the issue I described above still persists in 9.2.0. The article you linked is the same one I linked.
Also, I would appreciate if you could confirm the correct settings to use in our case.
Thanks!
-
0
hi
so I updated to it to test and the issue I described above still persists in 9.2.0. The article you linked is the same one I linked.
Can you share some screenshots?
Have you added the
UseAbpTimeZone
middleware?Thanks.
-
1
In ABP, when you set
AbpClockOptions.Kind
toDateTimeKind.Utc
and configure theAbp.Timing.TimeZone
setting, the framework is designed to display times in the user's or application's configured time zone throughout the UI, including logs. But it writes in UTC format to the server.The correct approach is to use both:
AbpClockOptions.Kind = DateTimeKind.Utc
(to ensure all times are stored and handled as UTC)Npgsql.EnableLegacyTimestampBehavior
(for PostgreSQL compatibility)
If the audit logs page is not converting UTC times to the user's time zone, this can be bug . Other pages, such as the security logs, already use the time zone setting as expected.
You are configuring time zones correctly in your application. No further changes are needed to your settings. The issue is with the audit logs page not applying the time zone conversion, and this should be reported to the ABP team for correction.
Send us related screenshots.
-
0
Sorry for the delay on this. I think it's important to explain in more details my concern regarding the correct time zone settings.
When we initially migrated to PostgreSQL, the migration guide didn't include the instruction to use the
EnableLegacyTimestampBehavior
setting. That means that when we followed the old version of the guide, we got the same error reported here, and in this same thread you can see that the solution is to setAbpClockOptions.Kind
toDateTimeKind.Utc
to fix the error, so that's what we did and it worked.So now that the migration guide has been updated to include the
EnableLegacyTimestampBehavior
setting, theAbpClockOptions
setting we used seems no longer needed.However, if I try to include the
EnableLegacyTimestampBehavior
setting now, that results in changes to all timestamp columns in the DB (migrations) since this setting controls the type for these columns. For example:// ... migrationBuilder.AlterColumn<DateTime>( name: "DeletionTime", table: "AbpUsers", type: "timestamp without time zone", nullable: true, oldClrType: typeof(DateTime), oldType: "timestamp with time zone", oldNullable: true); // ...
I have not applied this migration since I'm not sure if it's the right thing to do in this case.
Considering this situation, what would be the recommended course of action? I think that before I can reliably report any problem related to time zone, first I need to ensure everything is correct in my application and database.
-
0
hi
You don't need to use timezone in your database. The abp framework automatically handles time in the database and application.
It will convert the datetime to UTC when storing it in the database. After reading, it will convert it to UTC. The application/UI will convert it to the user's timezone.
Thanks.
-
0
Hi there.
I have migrated my application to ABP 9.2.0 and applied the migrations that updated all timestamp columns in the database to type
timestamp without time zone
. I'm using bothNpgsql.EnableLegacyTimestampBehavior
andAbpClockOptions.Kind = DateTimeKind.Utc
. With this, I believe now I have the correct time zone configurations both in application and database according to your instructions.With that said, I still observe the issue I reported initially, where the time displayed in the audit logs page is incorrect, ignoring the time zone settings (application or account). Here are some screenshots:
/audit-logs
page, showing UTC time (❌ incorrect)
AbpAuditLogs
table, storing UTC time (✅ correct)
/Account/SecurityLogs
page, showing local time (✅ correct)
-
0
I have verified that adding
UseAbpTimeZone
to my application initialization does seem to solve the issue in the/audit-logs
page and it now shows the correct local time:Still, it's not clear to me when to have
UseAbpTimeZone
or not (I couldn't find any documentation on it besides your article).The inconsistency shown in my previous post does seem like a bug... 🤔
-
0
hi
The latest document mentioned it. : )
https://abp.io/docs/latest/framework/infrastructure/timing#useabptimezone-middleware